code: def populate_local_cache(self):
          
          fw_dict = self.get_all_fw_db()
          LOG.info("Populating FW Mgr Local Cache")
          for fw_id in fw_dict:
              fw_data = fw_dict.get(fw_id)
              tenant_id = fw_data.get('tenant_id')
              rule_dict = fw_data.get('rules').get('rules')
              policy_id = fw_data.get('rules').get('firewall_policy_id')
              for rule in rule_dict:
                  fw_evt_data = self.convert_fwdb_event_msg(rule_dict.get(rule),
                                                            tenant_id, rule,
                                                            policy_id)
                  LOG.info("Populating Rules for tenant %s", tenant_id)
                  self.fw_rule_create(fw_evt_data, cache=True)
              fw_os_data = self.os_helper.get_fw(fw_id)
              # If enabler is stopped and FW is deleted, then the above routine
              # will fail.
              if fw_os_data is None:
                  fw_os_data = self.convert_fwdb(tenant_id, fw_data.get('name'),
                                                 policy_id, fw_id)
              LOG.info("Populating FW for tenant %s", tenant_id)
              self.fw_create(fw_os_data, cache=True)
              if fw_data.get('device_status') == 'SUCCESS':
                  self.fwid_attr[tenant_id].fw_drvr_created(True)
              else:
                  self.fwid_attr[tenant_id].fw_drvr_created(False)
          return fw_dict
docs: This populates the local cache after reading the Database.
  
          It calls the appropriate rule create, fw create routines.
          It doesn't actually call the routine to prepare the fabric or cfg the
          device since it will be handled by retry module.