You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
why use wait_for_termination method will stuck the code #1004
@banzhihang1 can you share the implementation of ClassFactory.create_dynamic_model? I'm imagining that its likely to be the problem here (i.e. not thread safe).
It would be most helpful if you can share a self-contained reproduction script without private/external dependencies.
classClassFactorydefself.create_dynamic_model(database_name,table_name,deletable=false)new_class=self.name + database_name.camelize + table_name.singularize.camelizeifdeletableexisting_classes=ActiveRecord::Base.descendants.reject(&:abstract_class).select{ |m| m.table_name == table_name && m.database_name == database_name}ifexisting_classes.length == 1include_delete_restore(existing_classes[0])returnexisting_classes[0]endifexisting_classes.length > 1primary=find_primary_existing_class(existing_classes)ifprimary.present?include_delete_restore(primary)returnprimaryendendendexisting_class=begink=Module.const_get(new_class)ifk.database_name == database_name && k.table_name == table_namekendrescueNameErrornilendifexisting_classinclude_delete_restore(existing_class)ifdeletablereturnexisting_classendObject.const_set(new_class,Class.new(database_name == 'one_eye' ? ActiveRecord::Base : "#{database_name.camelcase}DatabaseRecord".constantize))klass=new_class.constantizeklass.table_name=table_nameklass.inheritance_column=nilifklass.primary_key == nil# Rails can't handle composite PKs.# We have to retrieve from the schema cache and explicitly setkey=klass.connection.schema_cache.primary_keys(table_name)klass.primary_key=keyendinclude_delete_restore(klass)ifdeletableklassendprivatedefself.include_delete_restore(klass)klass.include(DeleteRestore::Deletable)klass.include(DeleteRestore::Restorable)enddefself.find_primary_existing_class(existing_classes)# First check to see if any have been marked as primaryprimary=existing_classes.select{ |c| c.instance_variable_defined?(:@primary_model_for_table) && c.instance_variable_get(:@primary_model_for_table)}returnprimary[0]ifprimary.length == 1# Then check to see if only one implements Deletabledeletable=existing_classes.select{ |c| c < DeleteRestore::Deletable}returndeletable[0]ifdeletable.length == 1# Check to see if only one override the delete_batch methodoverriding=existing_classes.select{ |c| c.respond_to?(:delete_batch) && c.method(:delete_batch).owner != DeleteRestore::Deletable::ClassMethods}returnoverriding[0]ifoverriding.length == 1# If we can't narrow it down, return nilreturnnilendend
The code did not run in, but got stuck in an external call
Activity
bensheldon commentedon Jul 14, 2023
@banzhihang1 can you share the implementation of
ClassFactory.create_dynamic_model? I'm imagining that its likely to be the problem here (i.e. not thread safe).It would be most helpful if you can share a self-contained reproduction script without private/external dependencies.
banzhihang1 commentedon Jul 17, 2023
@bensheldon this is code
The code did not run in, but got stuck in an external call