From 515787e8c4a7ad5b76adb285d6525c6883840c96 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 20 Sep 2023 10:18:07 +0200 Subject: [PATCH 01/34] Adds some utility function usable to merge two databases together - Nils --- src/pycram/orm/base.py | 7 +-- src/pycram/orm/utils.py | 112 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 src/pycram/orm/utils.py diff --git a/src/pycram/orm/base.py b/src/pycram/orm/base.py index 1d64d540e..8e4c78c78 100644 --- a/src/pycram/orm/base.py +++ b/src/pycram/orm/base.py @@ -38,7 +38,7 @@ class Base(sqlalchemy.orm.DeclarativeBase): id = sqlalchemy.Column(sqlalchemy.types.Integer, autoincrement=True, primary_key=True) """Unique integer ID as auto incremented primary key.""" - metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id"), nullable=True) + metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id", onupdate="CASCADE"), nullable=True) """Related MetaData Object to store information about the context of this experiment.""" def __repr__(self): @@ -93,6 +93,7 @@ def reset(cls): cls._self = None + class Position(Base): """ORM Class for 3D positions.""" @@ -152,10 +153,10 @@ class RobotState(Base): __tablename__ = "RobotState" - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id", onupdate="CASCADE")) """The position of the robot.""" - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id", onupdate="CASCADE")) """The orientation of the robot.""" torso_height = sqlalchemy.Column(sqlalchemy.types.Float) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py new file mode 100644 index 000000000..2b916eda7 --- /dev/null +++ b/src/pycram/orm/utils.py @@ -0,0 +1,112 @@ +import traceback + +import sqlalchemy +import pycram.orm.base +from pycram.designators.action_designator import * +from pycram.designators.object_designator import * + + +def logDB(in_session, filename, b_write_to_console=False): + """ + Utility function which stores a database in a local file. + + :param in_session: (sqlalchemy.orm.session) Database Session which should be logged + :param filename: (String) Filename of the logfile + :param b_write_to_console: (bool) enables writing to the console. Default false + """ + f = open(filename, "w") + for table in Base.__subclasses__(): + for column_object in in_session.query(table).all(): + if b_write_to_console: + print("I am writing: {}".format(str(column_object.__dict__))) + f.write(str(column_object.__dict__)) + f.write("\n") + f.close() + + +def printDB(in_SessionMaker): + """ + Prints all ORM Class data within the given Session. + + :param in_session: (sqlalchemy.orm.session) Database Session which should be printed + """ + memory_session = in_SessionMaker() + for table in Base.__subclasses__(): + smt = sqlalchemy.select('*').select_from(table) + result = memory_session.execute(smt).all() + print(result) + + +def update_primary_key(source_engine, destination_engine): + ''' + Primary keys of destination will be updated so that there are no collisions when merging. + Care it is expected that the database takes care of cascading the change through its foreign keys + Will create own session + + :param source_engine: (sqlalchemy.orm.engine) Engine of the source data_base + :param destination_engine: (sqlalchemy.orm.engine) Engine of the destination data_base + ''' + real_session = sqlalchemy.orm.Session(bind=destination_engine) + memory_session = sqlalchemy.orm.Session(bind=source_engine) + primaryKeys = {} + for table in Base.__subclasses__(): # iterate over all tables + highest_free_keyValue = 0 + primaryKeys[table] = {} + list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() + for key in list_of_primary_keys_of_this_table: + # make it smart but maybe + all_memory_key_values = memory_session.query(key).all() + primaryKeys[table][key.name] = real_session.query(key).all() + if all_memory_key_values: + highest_free_keyValue = max(all_memory_key_values)[0] + 1 # ToDo: Make it even more generic? # We will add 1 to the id then let the DB to the rest, afterwards we will compy all info over + for column_object in real_session.query(table).all(): # iterate over all columns + if column_object.__dict__[key.name] in all_memory_key_values: + print("Found primarykey collision in table {} value: {} max value in memory {}".format(table, + column_object.__dict__[ + key.name], + highest_free_keyValue)) + column_object.__dict__[key.name] = highest_free_keyValue + highest_free_keyValue += 1 + + real_session.commit() + real_session.close() + + +def copy_database(source_session_maker, destination_session_maker): + ''' + Primary keys of destination will be updated so that there are no collisions when merging. + Care it is expected that the database takes care of cascading the change through its foreign keys + Will create own session + + :param source_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the source database + :param destination_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the destination database + ''' + source_session = source_session_maker() + objects_to_add = [] + try: + for orm_object_class in Base.__subclasses__(): + result = source_session.execute( + sqlalchemy.select(orm_object_class).options(sqlalchemy.orm.joinedload('*'))).mappings().all() + for row in result: + for key in row: + if not sqlalchemy.inspect(row[key]).detached and not sqlalchemy.inspect( + row[key]).transient and not sqlalchemy.inspect(row[key]).deleted: + source_session.refresh(row[key]) + source_session.expunge(row[key]) + sqlalchemy.orm.make_transient(row[key]) + objects_to_add.append(row[key]) + else: + print("WARNING: Ignored already detached ORM Object {} ".format( + row[key])) # ToDo: Maybe give option to include theses items (could break something) + except Exception as e: + traceback.print_exc() + # logging.error(traceback.format_exc()) + finally: + source_session.close() + if len(objects_to_add) < 1: + return + destination_session = destination_session_maker() + + destination_session.add_all(objects_to_add) + destination_session.commit() + destination_session.close() From bd78868b49978b757bbad967c75a92dea3343609 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 21 Sep 2023 09:37:57 +0200 Subject: [PATCH 02/34] Refactors code to convey to the code conventions --- src/pycram/orm/utils.py | 103 ++++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 46 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 2b916eda7..5a1aba8b5 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -1,86 +1,98 @@ import traceback +import rospy import sqlalchemy import pycram.orm.base from pycram.designators.action_designator import * from pycram.designators.object_designator import * -def logDB(in_session, filename, b_write_to_console=False): +def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): """ - Utility function which stores a database in a local file. + Writes all ORM Objects stored within the given session into a local file. - :param in_session: (sqlalchemy.orm.session) Database Session which should be logged - :param filename: (String) Filename of the logfile - :param b_write_to_console: (bool) enables writing to the console. Default false - """ - f = open(filename, "w") - for table in Base.__subclasses__(): - for column_object in in_session.query(table).all(): - if b_write_to_console: - print("I am writing: {}".format(str(column_object.__dict__))) - f.write(str(column_object.__dict__)) - f.write("\n") - f.close() + :param in_session: (sqlalchemy.orm.session) Database Session which should be logged + :param filename: (String) Filename of the logfile + :param b_write_to_console: (bool) enables writing to the console. Default false + """ + with open(filename, "w") as f: + for table in Base.__subclasses__(): + for column_object in in_session.query(table).all(): + if b_write_to_console: + rospy.loginfo("I am writing: {}".format(str(column_object.__dict__))) + f.write(str(column_object.__dict__)) + f.write("\n") -def printDB(in_SessionMaker): +def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): """ - Prints all ORM Class data within the given Session. + Prints all ORM Class data within the given Session. - :param in_session: (sqlalchemy.orm.session) Database Session which should be printed - """ - memory_session = in_SessionMaker() + :param in_sessionmaker: (sqlalchemy.orm.session) Database Session which should be printed + """ + memory_session = in_Sessionmaker() for table in Base.__subclasses__(): smt = sqlalchemy.select('*').select_from(table) result = memory_session.execute(smt).all() - print(result) + rospy.loginfo(result) -def update_primary_key(source_engine, destination_engine): - ''' - Primary keys of destination will be updated so that there are no collisions when merging. - Care it is expected that the database takes care of cascading the change through its foreign keys - Will create own session +def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: sqlalchemy.orm.engine): + """ + Updates all the primary keys of the database associated with the destination engine, so that there will be no + problems when merging it into the source database. In order to achieve this the highest id value of the source + engine is searched and the primary keys of the destination database will get all the values following that. + Cascading triggers in the database will take care of the rest. Careful as today (20.09.2023) this will not work in + memory databases as there are no triggers :param source_engine: (sqlalchemy.orm.engine) Engine of the source data_base :param destination_engine: (sqlalchemy.orm.engine) Engine of the destination data_base - ''' + """ real_session = sqlalchemy.orm.Session(bind=destination_engine) memory_session = sqlalchemy.orm.Session(bind=source_engine) - primaryKeys = {} + primary_keys = {} for table in Base.__subclasses__(): # iterate over all tables - highest_free_keyValue = 0 - primaryKeys[table] = {} + highest_free_key_value = 0 + primary_keys[table] = {} list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() for key in list_of_primary_keys_of_this_table: # make it smart but maybe all_memory_key_values = memory_session.query(key).all() - primaryKeys[table][key.name] = real_session.query(key).all() + primary_keys[table][key.name] = real_session.query(key).all() if all_memory_key_values: - highest_free_keyValue = max(all_memory_key_values)[0] + 1 # ToDo: Make it even more generic? # We will add 1 to the id then let the DB to the rest, afterwards we will compy all info over + highest_free_key_value = max(all_memory_key_values)[ + 0] + 1 + """""" + # ToDo: Make it even more generic? # We will add 1 to the id then let the DB to the rest, afterwards we will compy all info over for column_object in real_session.query(table).all(): # iterate over all columns if column_object.__dict__[key.name] in all_memory_key_values: - print("Found primarykey collision in table {} value: {} max value in memory {}".format(table, - column_object.__dict__[ - key.name], - highest_free_keyValue)) - column_object.__dict__[key.name] = highest_free_keyValue - highest_free_keyValue += 1 + rospy.loginfo( + "Found primary_key collision in table {} value: {} max value in memory {}".format(table, + column_object.__dict__[ + key.name], + highest_free_key_value)) + column_object.__dict__[key.name] = highest_free_key_value + highest_free_key_value += 1 real_session.commit() real_session.close() -def copy_database(source_session_maker, destination_session_maker): - ''' - Primary keys of destination will be updated so that there are no collisions when merging. - Care it is expected that the database takes care of cascading the change through its foreign keys - Will create own session +def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, + destination_session_maker: sqlalchemy.orm.sessionmaker): + """ + Iterates through all ORM Objects within tht source database and merges them into the destination database. Careful + this function does not check if there are any primary key collisions or updates any data. + + note: + Ignores all previously detached data, could result in loss of infromation. During testing database objects + sometimes had a detached twin. As a possible feature in the future it maybe useful to give the user an + opportunity to decide what happens with the detached objects. Careful this could lead to dublicated data in the + destination database. :param source_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the source database :param destination_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the destination database - ''' + """ source_session = source_session_maker() objects_to_add = [] try: @@ -96,11 +108,10 @@ def copy_database(source_session_maker, destination_session_maker): sqlalchemy.orm.make_transient(row[key]) objects_to_add.append(row[key]) else: - print("WARNING: Ignored already detached ORM Object {} ".format( - row[key])) # ToDo: Maybe give option to include theses items (could break something) + rospy.logwarn("WARNING: Ignored already detached ORM Object {} ".format( + row[key])) except Exception as e: traceback.print_exc() - # logging.error(traceback.format_exc()) finally: source_session.close() if len(objects_to_add) < 1: From c165c2784a4a45a863e9b7aca64123c9129711bd Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 21 Sep 2023 09:39:48 +0200 Subject: [PATCH 03/34] Changes real and memory into source and destination --- src/pycram/orm/utils.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 5a1aba8b5..cafc87f5c 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -48,8 +48,8 @@ def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: :param source_engine: (sqlalchemy.orm.engine) Engine of the source data_base :param destination_engine: (sqlalchemy.orm.engine) Engine of the destination data_base """ - real_session = sqlalchemy.orm.Session(bind=destination_engine) - memory_session = sqlalchemy.orm.Session(bind=source_engine) + destination_session = sqlalchemy.orm.Session(bind=destination_engine) + source_session = sqlalchemy.orm.Session(bind=source_engine) primary_keys = {} for table in Base.__subclasses__(): # iterate over all tables highest_free_key_value = 0 @@ -57,14 +57,14 @@ def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() for key in list_of_primary_keys_of_this_table: # make it smart but maybe - all_memory_key_values = memory_session.query(key).all() - primary_keys[table][key.name] = real_session.query(key).all() + all_memory_key_values = source_session.query(key).all() + primary_keys[table][key.name] = destination_session.query(key).all() if all_memory_key_values: highest_free_key_value = max(all_memory_key_values)[ 0] + 1 """""" # ToDo: Make it even more generic? # We will add 1 to the id then let the DB to the rest, afterwards we will compy all info over - for column_object in real_session.query(table).all(): # iterate over all columns + for column_object in destination_session.query(table).all(): # iterate over all columns if column_object.__dict__[key.name] in all_memory_key_values: rospy.loginfo( "Found primary_key collision in table {} value: {} max value in memory {}".format(table, @@ -74,8 +74,8 @@ def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: column_object.__dict__[key.name] = highest_free_key_value highest_free_key_value += 1 - real_session.commit() - real_session.close() + destination_session.commit() + destination_session.close() def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, From c2115aa95e7e72a19ee77c52a53d7c1b7dcb2946 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 21 Sep 2023 09:49:17 +0200 Subject: [PATCH 04/34] Fixed typos --- src/pycram/orm/utils.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index cafc87f5c..f104a4fad 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -62,8 +62,6 @@ def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: if all_memory_key_values: highest_free_key_value = max(all_memory_key_values)[ 0] + 1 - """""" - # ToDo: Make it even more generic? # We will add 1 to the id then let the DB to the rest, afterwards we will compy all info over for column_object in destination_session.query(table).all(): # iterate over all columns if column_object.__dict__[key.name] in all_memory_key_values: rospy.loginfo( @@ -85,9 +83,9 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, this function does not check if there are any primary key collisions or updates any data. note: - Ignores all previously detached data, could result in loss of infromation. During testing database objects + Ignores all previously detached data, could result in loss of information. During testing database objects sometimes had a detached twin. As a possible feature in the future it maybe useful to give the user an - opportunity to decide what happens with the detached objects. Careful this could lead to dublicated data in the + opportunity to decide what happens with the detached objects. Careful this could lead to duplicated data in the destination database. :param source_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the source database From 2981bec11c6349d32bb601ba1ad90bc2b2a7b3f2 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 21 Sep 2023 14:15:04 +0200 Subject: [PATCH 05/34] Fixed Typos and comply to documentation standards --- src/pycram/orm/utils.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index f104a4fad..9d5ff9e2e 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -7,12 +7,12 @@ from pycram.designators.object_designator import * -def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): +def write_database_to_file(in_session: sqlalchemy.orm.Session, filename: str, b_write_to_console: bool = False): """ Writes all ORM Objects stored within the given session into a local file. - :param in_session: (sqlalchemy.orm.session) Database Session which should be logged - :param filename: (String) Filename of the logfile + :param in_session: Database Session which should be logged + :param filename: Filename of the logfile :param b_write_to_console: (bool) enables writing to the console. Default false """ with open(filename, "w") as f: @@ -24,7 +24,7 @@ def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_ f.write("\n") -def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): +def print_database(in_Sessionmaker: sqlalchemy.orm.Sessionmaker): """ Prints all ORM Class data within the given Session. @@ -37,13 +37,13 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): rospy.loginfo(result) -def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: sqlalchemy.orm.engine): +def update_primary_key(source_engine: sqlalchemy.orm.Engine, destination_engine: sqlalchemy.orm.Engine): """ Updates all the primary keys of the database associated with the destination engine, so that there will be no problems when merging it into the source database. In order to achieve this the highest id value of the source engine is searched and the primary keys of the destination database will get all the values following that. - Cascading triggers in the database will take care of the rest. Careful as today (20.09.2023) this will not work in - memory databases as there are no triggers + Cascading triggers in the database will take care of the rest. Careful 2023 this will not work in + memory databases as there are no triggers. :param source_engine: (sqlalchemy.orm.engine) Engine of the source data_base :param destination_engine: (sqlalchemy.orm.engine) Engine of the destination data_base @@ -76,13 +76,13 @@ def update_primary_key(source_engine: sqlalchemy.orm.engine, destination_engine: destination_session.close() -def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, - destination_session_maker: sqlalchemy.orm.sessionmaker): +def copy_database(source_session_maker: sqlalchemy.orm.Sessionmaker, + destination_session_maker: sqlalchemy.orm.Sessionmaker): """ Iterates through all ORM Objects within tht source database and merges them into the destination database. Careful this function does not check if there are any primary key collisions or updates any data. - note: + .. note:: Ignores all previously detached data, could result in loss of information. During testing database objects sometimes had a detached twin. As a possible feature in the future it maybe useful to give the user an opportunity to decide what happens with the detached objects. Careful this could lead to duplicated data in the From 3a33c02c0a87a52e60264f75583c7131702b7df1 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 21 Sep 2023 14:17:19 +0200 Subject: [PATCH 06/34] Deleted dublicated information --- src/pycram/orm/utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 9d5ff9e2e..d28e11a6c 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -13,7 +13,7 @@ def write_database_to_file(in_session: sqlalchemy.orm.Session, filename: str, b_ :param in_session: Database Session which should be logged :param filename: Filename of the logfile - :param b_write_to_console: (bool) enables writing to the console. Default false + :param b_write_to_console: enables writing to the console. Default false """ with open(filename, "w") as f: for table in Base.__subclasses__(): @@ -28,7 +28,7 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.Sessionmaker): """ Prints all ORM Class data within the given Session. - :param in_sessionmaker: (sqlalchemy.orm.session) Database Session which should be printed + :param in_sessionmaker: Database Session which should be printed """ memory_session = in_Sessionmaker() for table in Base.__subclasses__(): @@ -45,8 +45,8 @@ def update_primary_key(source_engine: sqlalchemy.orm.Engine, destination_engine: Cascading triggers in the database will take care of the rest. Careful 2023 this will not work in memory databases as there are no triggers. - :param source_engine: (sqlalchemy.orm.engine) Engine of the source data_base - :param destination_engine: (sqlalchemy.orm.engine) Engine of the destination data_base + :param source_engine: Engine of the source data_base + :param destination_engine: Engine of the destination data_base """ destination_session = sqlalchemy.orm.Session(bind=destination_engine) source_session = sqlalchemy.orm.Session(bind=source_engine) @@ -88,8 +88,8 @@ def copy_database(source_session_maker: sqlalchemy.orm.Sessionmaker, opportunity to decide what happens with the detached objects. Careful this could lead to duplicated data in the destination database. - :param source_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the source database - :param destination_session_maker: (sqlalchemy.orm.sessionmaker) Sessionmaker of the destination database + :param source_session_maker: Sessionmaker of the source database + :param destination_session_maker: Sessionmaker of the destination database """ source_session = source_session_maker() objects_to_add = [] From d64b888db8777003c574a502b26b4d8ce5485fe1 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 25 Sep 2023 16:11:05 +0200 Subject: [PATCH 07/34] First inital commit of the merging testing case --- test/test_database_merger.py | 142 +++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 test/test_database_merger.py diff --git a/test/test_database_merger.py b/test/test_database_merger.py new file mode 100644 index 000000000..34657938c --- /dev/null +++ b/test/test_database_merger.py @@ -0,0 +1,142 @@ +import traceback +import unittest + +import sqlalchemy +import pycram.orm.base +from pycram.designators.action_designator import * +from pycram.designators.object_designator import * +import pycram.orm.utils + +from pycram.designators.action_designator import * +from pycram.designators.location_designator import * +from pycram.process_module import simulated_robot +from pycram.enums import Arms +from pycram.task import with_tree +import pycram.task +from pycram.bullet_world import BulletWorld, Object +from pycram.designators.object_designator import * +import anytree + + +class ExamplePlans(): + def __init__(self): + self.world = BulletWorld("DIRECT") + self.pr2 = Object("pr2", "robot", "pr2.urdf") + self.kitchen = Object("kitchen", "environment", "kitchen.urdf") + self.milk = Object("milk", "milk", "milk.stl", pose=Pose([2.5, 2, 1.02]), color=[1, 0, 0, 1]) + self.cereal = Object("cereal", "cereal", "breakfast_cereal.stl", pose=Pose([2.5, 2.3, 1.05]), color=[0, 1, 0, 1]) + self.milk_desig = ObjectDesignatorDescription(names=["milk"]) + self.cereal_desig = ObjectDesignatorDescription(names=["cereal"]) + self.robot_desig = ObjectDesignatorDescription(names=["pr2"]).resolve() + self.kitchen_desig = ObjectDesignatorDescription(names=["kitchen"]) + + + @with_tree + def pick_and_place_plan(self): + with simulated_robot: + ParkArmsAction.Action(Arms.BOTH).perform() + MoveTorsoAction([0.3]).resolve().perform() + pickup_pose = CostmapLocation(target=self.cereal_desig.resolve(), reachable_for=self.robot_desig).resolve() + pickup_arm = pickup_pose.reachable_arms[0] + NavigateAction(target_locations=[pickup_pose.pose]).resolve().perform() + PickUpAction(object_designator_description=self.cereal_desig, arms=[pickup_arm], grasps=["front"]).resolve().perform() + ParkArmsAction([Arms.BOTH]).resolve().perform() + + place_island = SemanticCostmapLocation("kitchen_island_surface", self.kitchen_desig.resolve(), + self.cereal_desig.resolve()).resolve() + + place_stand = CostmapLocation(place_island.pose, reachable_for=self.robot_desig, reachable_arm=pickup_arm).resolve() + + NavigateAction(target_locations=[place_stand.pose]).resolve().perform() + + PlaceAction(self.cereal_desig, target_locations=[place_island.pose], arms=[pickup_arm]).resolve().perform() + + ParkArmsAction.Action(Arms.BOTH).perform() + + def clear_tree(self): # not sure if needed + pycram.task.reset_tree() + + + + +#Note: Can't test full functionallity + +class MergeDatabaseTest(unittest.TestCase): + source_engine: sqlalchemy.engine.Engine + destination_engine: sqlalchemy.engine.Engine + source_session_maker: sqlalchemy.orm.sessionmaker + destination_session_maker: sqlalchemy.orm.sessionmaker + + @classmethod + def setUpClass(cls) -> None: + super().setUpClass() + cls.source_engine=sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) + cls.destination_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) + cls.source_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.source_engine) + cls.destination_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.destination_engine) + source_session=cls.source_session_maker() + destination_session=cls.destination_session_maker() + pycram.orm.base.Base.metadata.create_all(cls.source_engine) + pycram.orm.base.Base.metadata.create_all(cls.destination_engine) + source_session.commit() + destination_session.commit() + source_session.close() + destination_session.close() + + def setUp(self) -> None: + super().setUp() + source_session=self.source_session_maker() + destination_session=self.destination_session_maker() + example_plans=ExamplePlans() + for i in range(2): + try: + print("ExamplePlans run {}".format(i)) + example_plans.pick_and_place_plan() + example_plans.world.reset_bullet_world() + pycram.orm.base.MetaData().description ="Unittest: Example pick and place {}".format(i) + except Exception as e: + print("Error: {}\n{}".format(type(e).__name__,e)) + + source_meta_data=pycram.orm.base.MetaData() + source_meta_data.description= "Not all who wander are lost" + source_meta_data.insert(source_session) + pycram.task.task_tree.root.insert(source_session) + source_meta_data.reset() + destination_metadata=pycram.orm.base.MetaData() + destination_metadata.description="Not all that glitters is gold" + pycram.task.task_tree.root.insert(destination_session) + destination_metadata.insert(destination_session) + if(source_meta_data==destination_metadata): + print("Then you are lost") + source_session.commit() + destination_session.commit() + example_plans.world.exit() + source_session.close() + destination_session.close() + + def tearDown(self) -> None: + super().tearDown() + + @classmethod + def TearDownClass(cls): + super().TearDownClass() + + def test_merge_databases(self): + pycram.orm.utils.print_database(self.destination_session_maker) + print(10*'-') + pycram.orm.utils.print_database(self.source_session_maker) + print(50*'$') + pycram.orm.utils.update_primary_key(self.source_engine,self.destination_engine) + pycram.orm.utils.print_database(self.destination_session_maker) + print(10*'-') + pycram.orm.utils.print_database(self.source_session_maker) + #pycram.orm.utils.copy_database(self.destination_session_maker,self.source_session_maker) + pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) + pycram.orm.utils.print_database(self.destination_session_maker) + print(10*'-') + pycram.orm.utils.print_database(self.source_session_maker) + +# do stuff + + + From f9cdb8ef711a5cee2da2cc4034d5f53c7c534695 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 5 Oct 2023 15:23:04 +0200 Subject: [PATCH 08/34] Makes all foreign keys constrains to CASCADE on update --- src/pycram/orm/action_designator.py | 73 ++++++++++++++++++----------- src/pycram/orm/base.py | 9 ++-- src/pycram/orm/motion_designator.py | 58 ++++++++++++++--------- src/pycram/orm/object_designator.py | 13 +++-- src/pycram/orm/task.py | 8 ++-- 5 files changed, 99 insertions(+), 62 deletions(-) diff --git a/src/pycram/orm/action_designator.py b/src/pycram/orm/action_designator.py index 427dc2eed..dd6ab5d83 100644 --- a/src/pycram/orm/action_designator.py +++ b/src/pycram/orm/action_designator.py @@ -12,7 +12,8 @@ class Action(Base): """ __tablename__ = "Action" dtype = sqlalchemy.Column(sqlalchemy.types.String(255)) - robot_state = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("RobotState.id")) + robot_state = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("RobotState.id"), + onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -23,7 +24,8 @@ class Action(Base): class ParkArmsAction(Action): """ORM Class of pycram.designators.action_designator.ParkArmsDesignator.""" __tablename__ = "ParkArms" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.Enum(Arms), nullable=False) __mapper_args__ = { @@ -39,9 +41,11 @@ class NavigateAction(Action): """ORM Class of pycram.designators.action_designator.NavigateAction.""" __tablename__ = "Navigate" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id", )) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -56,7 +60,8 @@ def __init__(self, position: Optional[int] = None, orientation: Optional[int] = class MoveTorsoAction(Action): """ORM Class of pycram.designators.action_designator.MoveTorsoAction.""" __tablename__ = "MoveTorso" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) position = sqlalchemy.Column(sqlalchemy.types.Float) __mapper_args__ = { @@ -71,7 +76,8 @@ def __init__(self, position: Optional[float] = None): class SetGripperAction(Action): """ORM Class of pycram.designators.action_designator.SetGripperAction.""" __tablename__ = "SetGripper" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) motion = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) @@ -88,9 +94,10 @@ def __init__(self, gripper: str, motion: str): class Release(Action): """ORM Class of pycram.designators.action_designator.Release.""" __tablename__ = "Release" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -100,10 +107,11 @@ class Release(Action): class GripAction(Action): """ORM Class of pycram.designators.action_designator.GripAction.""" __tablename__ = "Grip" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) effort = sqlalchemy.Column(sqlalchemy.types.Float, nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") # TODO grasped_object __mapper_args__ = { @@ -114,10 +122,11 @@ class GripAction(Action): class PickUpAction(Action): """ORM Class of pycram.designators.action_designator.PickUpAction.""" __tablename__ = "PickUp" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) grasp = sqlalchemy.Column(sqlalchemy.types.String(255)) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -132,11 +141,13 @@ def __init__(self, arm: str, grasp: str): class PlaceAction(Action): """ORM Class of pycram.designators.action_designator.PlaceAction.""" __tablename__ = "Place" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -150,11 +161,13 @@ def __init__(self, arm: str): class TransportAction(Action): """ORM Class of pycram.designators.action_designator.TransportAction.""" __tablename__ = "Transport" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -164,8 +177,9 @@ class TransportAction(Action): class LookAtAction(Action): """ORM Class of pycram.designators.action_designator.LookAtAction.""" __tablename__ = "LookAt" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -175,8 +189,9 @@ class LookAtAction(Action): class DetectAction(Action): """ORM Class of pycram.designators.action_designator.DetectAction.""" __tablename__ = "Detect" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -186,10 +201,11 @@ class DetectAction(Action): class OpenAction(Action): """ORM Class of pycram.designators.action_designator.OpenAction.""" __tablename__ = "Open" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) distance = sqlalchemy.Column(sqlalchemy.types.Float, nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -199,7 +215,8 @@ class OpenAction(Action): class CloseAction(Action): """ORM Class of pycram.designators.action_designator.CloseAction.""" __tablename__ = "Close" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) __mapper_args__ = { diff --git a/src/pycram/orm/base.py b/src/pycram/orm/base.py index 8e4c78c78..357adc7bc 100644 --- a/src/pycram/orm/base.py +++ b/src/pycram/orm/base.py @@ -38,7 +38,8 @@ class Base(sqlalchemy.orm.DeclarativeBase): id = sqlalchemy.Column(sqlalchemy.types.Integer, autoincrement=True, primary_key=True) """Unique integer ID as auto incremented primary key.""" - metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id", onupdate="CASCADE"), nullable=True) + metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id", onupdate="CASCADE"), + nullable=True) """Related MetaData Object to store information about the context of this experiment.""" def __repr__(self): @@ -93,7 +94,6 @@ def reset(cls): cls._self = None - class Position(Base): """ORM Class for 3D positions.""" @@ -121,7 +121,7 @@ class Quaternion(Base): z = sqlalchemy.Column(sqlalchemy.types.Float) w = sqlalchemy.Column(sqlalchemy.types.Float) - def __init__(self, x: float, y: float, z: float, w: float, metadata_id: Optional[int] = None): + def __init__(self, x: float, y: float, z: float, w: float, metadata_id: Optional[int] = None): super().__init__() self.x = x self.y = y @@ -156,7 +156,8 @@ class RobotState(Base): position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id", onupdate="CASCADE")) """The position of the robot.""" - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id", onupdate="CASCADE")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, + sqlalchemy.ForeignKey("Quaternion.id", onupdate="CASCADE")) """The orientation of the robot.""" torso_height = sqlalchemy.Column(sqlalchemy.types.Float) diff --git a/src/pycram/orm/motion_designator.py b/src/pycram/orm/motion_designator.py index 740214550..991ec783e 100644 --- a/src/pycram/orm/motion_designator.py +++ b/src/pycram/orm/motion_designator.py @@ -37,9 +37,11 @@ class MoveMotion(MotionDesignator): :ivar orientation: (Integer) Foreign key to Quaternion table """ __tablename__ = "MoveMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -55,8 +57,9 @@ class PickUpMotion(MotionDesignator): :ivar grasp: (String) Type of grasp used """ __tablename__ = "PickUpMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) grasp = sqlalchemy.Column(sqlalchemy.types.String(255)) @@ -76,12 +79,14 @@ class PlaceMotion(MotionDesignator): :ivar orientation: (Integer) Foreign key to Quaternion table """ __tablename__ = "PlaceMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -98,8 +103,9 @@ class AccessingMotion(MotionDesignator): :ivar drawer_joint: """ __tablename__ = "AccessingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - part_of = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + part_of = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) distance = sqlalchemy.Column(sqlalchemy.types.Float) @@ -120,9 +126,11 @@ class MoveTCPMotion(MotionDesignator): :ivar arm: String specifying which arm to move the TCP of """ __tablename__ = "MoveTCPMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") arm = sqlalchemy.Column(sqlalchemy.types.String(255)) __mapper_args__ = { @@ -140,10 +148,12 @@ class LookingMotion(MotionDesignator): """ __tablename__ = "LookingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -156,10 +166,12 @@ class MoveGripperMotion(MotionDesignator): """ __tablename__ = "MoveGripperMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) motion = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) - front_facing_axis = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + front_facing_axis = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), + onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -171,7 +183,8 @@ class DetectingMotion(MotionDesignator): """ __tablename__ = "DetectingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) object_type = sqlalchemy.Column(sqlalchemy.types.String(255)) cam_frame = sqlalchemy.Column(sqlalchemy.types.String(255)) @@ -186,7 +199,8 @@ class WorldStateDetectingMotion(MotionDesignator): """ __tablename__ = "WorldStateDetectingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", + primary_key=True) object_type = sqlalchemy.Column(sqlalchemy.types.String(255)) __mapper_args__ = { diff --git a/src/pycram/orm/object_designator.py b/src/pycram/orm/object_designator.py index 099a3c0b3..dc90cf229 100644 --- a/src/pycram/orm/object_designator.py +++ b/src/pycram/orm/object_designator.py @@ -13,8 +13,9 @@ class ObjectDesignator(Base): dtype = sqlalchemy.Column(sqlalchemy.types.String(255)) type = sqlalchemy.Column(sqlalchemy.types.String(255)) name = sqlalchemy.Column(sqlalchemy.types.String(255)) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), + onupdate="CASCADE") def __init__(self, type: str, name: str): super().__init__() @@ -31,8 +32,9 @@ class ObjectPart(ObjectDesignator): """ORM Class of pycram.designators.object_designator.LocatedObject.""" __tablename__ = "ObjectPart" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), primary_key=True) - part_of = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id")) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE", + primary_key=True) + part_of = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -42,7 +44,8 @@ class ObjectPart(ObjectDesignator): class BelieveObject(ObjectDesignator): __tablename__ = "BelieveObject" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE", + primary_key=True) __mapper_args__ = { "polymorphic_identity": __tablename__, diff --git a/src/pycram/orm/task.py b/src/pycram/orm/task.py index 3023a621f..b5f6a970f 100644 --- a/src/pycram/orm/task.py +++ b/src/pycram/orm/task.py @@ -11,12 +11,13 @@ class TaskTreeNode(Base): """ORM equivalent of pycram.task.TaskTreeNode.""" __tablename__ = "TaskTreeNode" - code = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Code.id")) + code = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Code.id", onupdate="CASCADE")) start_time = sqlalchemy.Column(sqlalchemy.types.DateTime) end_time = sqlalchemy.Column(sqlalchemy.types.DateTime, nullable=True) status = sqlalchemy.Column(sqlalchemy.types.Enum(TaskStatus)) reason = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=True) - parent = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("TaskTreeNode.id"), nullable=True) + parent = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("TaskTreeNode.id", onupdate="CASCADE"), + nullable=True) def __init__(self, code: int = None, start_time: datetime.datetime = None, end_time: datetime.datetime = None, status: str = None, reason: Optional[str] = None, parent: int = None): @@ -34,7 +35,8 @@ class Code(Base): __tablename__ = "Code" function = sqlalchemy.Column(sqlalchemy.types.String(255)) - designator = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), nullable=True) + designator = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", + nullable=True) def __init__(self, function: str = None, designator: Optional[int] = None): super().__init__() From 87cf32ff4a2cec336917f81994643a11328c274d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 5 Oct 2023 15:23:50 +0200 Subject: [PATCH 09/34] Fixes Bug in which changes didn't got commited. --- src/pycram/orm/utils.py | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index d28e11a6c..9b7a74870 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -7,7 +7,7 @@ from pycram.designators.object_designator import * -def write_database_to_file(in_session: sqlalchemy.orm.Session, filename: str, b_write_to_console: bool = False): +def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): """ Writes all ORM Objects stored within the given session into a local file. @@ -24,7 +24,7 @@ def write_database_to_file(in_session: sqlalchemy.orm.Session, filename: str, b_ f.write("\n") -def print_database(in_Sessionmaker: sqlalchemy.orm.Sessionmaker): +def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): """ Prints all ORM Class data within the given Session. @@ -37,7 +37,8 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.Sessionmaker): rospy.loginfo(result) -def update_primary_key(source_engine: sqlalchemy.orm.Engine, destination_engine: sqlalchemy.orm.Engine): +def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, + destination_session_maker: sqlalchemy.orm.sessionmaker): # source_engine: sqlalchemy.engine.Engine, destination_engine: sqlalchemy.engine.Engine """ Updates all the primary keys of the database associated with the destination engine, so that there will be no problems when merging it into the source database. In order to achieve this the highest id value of the source @@ -48,36 +49,42 @@ def update_primary_key(source_engine: sqlalchemy.orm.Engine, destination_engine: :param source_engine: Engine of the source data_base :param destination_engine: Engine of the destination data_base """ - destination_session = sqlalchemy.orm.Session(bind=destination_engine) - source_session = sqlalchemy.orm.Session(bind=source_engine) + destination_session = destination_session_maker() # sqlalchemy.orm.Session(bind=destination_engine) + source_session = source_session_maker() # sqlalchemy.orm.Session(bind=source_engine) primary_keys = {} + print(Base.__subclasses__()) for table in Base.__subclasses__(): # iterate over all tables highest_free_key_value = 0 primary_keys[table] = {} list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() for key in list_of_primary_keys_of_this_table: # make it smart but maybe - all_memory_key_values = source_session.query(key).all() + all_source_key_values = [] + for key_value_row in source_session.query(key).all(): + all_source_key_values.append(key_value_row[0]) primary_keys[table][key.name] = destination_session.query(key).all() - if all_memory_key_values: - highest_free_key_value = max(all_memory_key_values)[ - 0] + 1 + if all_source_key_values: + highest_free_key_value = max(all_source_key_values) + 1 for column_object in destination_session.query(table).all(): # iterate over all columns - if column_object.__dict__[key.name] in all_memory_key_values: + if column_object.__dict__[key.name] in all_source_key_values: + print("Found primary_key collision in table {} value: {} max value in memory {}".format(table, + column_object.__dict__[ + key.name], + highest_free_key_value)) rospy.loginfo( "Found primary_key collision in table {} value: {} max value in memory {}".format(table, column_object.__dict__[ key.name], highest_free_key_value)) - column_object.__dict__[key.name] = highest_free_key_value + sqlalchemy.orm.attributes.set_attribute(column_object, key.name, highest_free_key_value) highest_free_key_value += 1 destination_session.commit() destination_session.close() -def copy_database(source_session_maker: sqlalchemy.orm.Sessionmaker, - destination_session_maker: sqlalchemy.orm.Sessionmaker): +def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, + destination_session_maker: sqlalchemy.orm.sessionmaker): """ Iterates through all ORM Objects within tht source database and merges them into the destination database. Careful this function does not check if there are any primary key collisions or updates any data. @@ -101,7 +108,7 @@ def copy_database(source_session_maker: sqlalchemy.orm.Sessionmaker, for key in row: if not sqlalchemy.inspect(row[key]).detached and not sqlalchemy.inspect( row[key]).transient and not sqlalchemy.inspect(row[key]).deleted: - source_session.refresh(row[key]) + source_session.refresh(row[key]) # get newest value source_session.expunge(row[key]) sqlalchemy.orm.make_transient(row[key]) objects_to_add.append(row[key]) From 30a79b296cfee41768ff0182283a29dc2024da7d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Thu, 5 Oct 2023 15:24:48 +0200 Subject: [PATCH 10/34] Should work if the database cascades foreign key changes correctly -- which sadly it doesn't --- test/test_database_merger.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 34657938c..31af0d047 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -122,19 +122,12 @@ def TearDownClass(cls): super().TearDownClass() def test_merge_databases(self): + pycram.orm.utils.update_primary_key(self.source_session_maker,self.destination_session_maker)#self.source_engine,self.destination_engine) pycram.orm.utils.print_database(self.destination_session_maker) - print(10*'-') - pycram.orm.utils.print_database(self.source_session_maker) - print(50*'$') - pycram.orm.utils.update_primary_key(self.source_engine,self.destination_engine) - pycram.orm.utils.print_database(self.destination_session_maker) - print(10*'-') + print("Source:"+10*'-') pycram.orm.utils.print_database(self.source_session_maker) #pycram.orm.utils.copy_database(self.destination_session_maker,self.source_session_maker) pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) - pycram.orm.utils.print_database(self.destination_session_maker) - print(10*'-') - pycram.orm.utils.print_database(self.source_session_maker) # do stuff From acc2d40d9bea32bc53886f965480c580782bd47a Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 23 Oct 2023 14:24:10 +0200 Subject: [PATCH 11/34] Adds two new functions: Get_all_child_nodes and update foreign_keys --- src/pycram/orm/utils.py | 59 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 9b7a74870..d1d0f0a68 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -37,6 +37,19 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): rospy.loginfo(result) +def get_all_children_set(in_node, node_set=None): + all_nodes = set() + if node_set is None: + node_set = set() + node_set.add(in_node) + if in_node.__subclasses__(): + for node in in_node.__subclasses__(): + all_nodes.update(get_all_children_set(node, node_set)) + else: + pass + all_nodes.update(node_set) + return all_nodes + def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session_maker: sqlalchemy.orm.sessionmaker): # source_engine: sqlalchemy.engine.Engine, destination_engine: sqlalchemy.engine.Engine """ @@ -60,11 +73,20 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, for key in list_of_primary_keys_of_this_table: # make it smart but maybe all_source_key_values = [] + all_destination_key_values = [] for key_value_row in source_session.query(key).all(): - all_source_key_values.append(key_value_row[0]) + all_source_key_values.append(key_value_row[0]) # get all values of key from source session + for key_value_row in destination_session.query(key).all(): + all_destination_key_values.append(key_value_row[0]) # get all values of key from source session primary_keys[table][key.name] = destination_session.query(key).all() if all_source_key_values: - highest_free_key_value = max(all_source_key_values) + 1 + if all_destination_key_values: # need to check if destination maybe has more items then source + if max(all_source_key_values) < max(all_destination_key_values): + highest_free_key_value = max(all_destination_key_values) + 1 + else: + highest_free_key_value = max(all_source_key_values) + 1 + else: # if destination values do not exist we use source + highest_free_key_value = max(all_source_key_values) + 1 for column_object in destination_session.query(table).all(): # iterate over all columns if column_object.__dict__[key.name] in all_source_key_values: print("Found primary_key collision in table {} value: {} max value in memory {}".format(table, @@ -78,8 +100,7 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, highest_free_key_value)) sqlalchemy.orm.attributes.set_attribute(column_object, key.name, highest_free_key_value) highest_free_key_value += 1 - - destination_session.commit() + destination_session.commit() # commit after every table destination_session.close() @@ -126,3 +147,33 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session.add_all(objects_to_add) destination_session.commit() destination_session.close() + + +def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker,orm_classes : list): + with session_maker() as session: + for orm_class in orm_classes: + try: + foreign_key_statement = sqlalchemy.text( + "SELECT con.oid, con.conname, con.contype, con.confupdtype, con.confdeltype, con.confmatchtype, pg_get_constraintdef(con.oid) FROM pg_catalog.pg_constraint con INNER JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid INNER JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace WHERE rel.relname = '{}';".format( + orm_class.__tablename__)) + response = session.execute(foreign_key_statement) # engine.connect().execute(foreign_key_statement) + print(25 * '~' + "{}".format(orm_class.__tablename__) + 25 * '~') + for line in response: + if line.conname.endswith("fkey"): + if 'a' in line.confupdtype: # a --> no action | if there is no action we set it to cascading + # I just assume there aren't any other constraints + drop_statement = sqlalchemy.text( + "alter table \"{}\" drop constraint \"{}\";".format(orm_class.__tablename__, + line.conname)) + drop_response = session.execute(drop_statement) + # drop_response = engine.connect().execute(drop_statement) + alter_statement = sqlalchemy.text( + "alter table \"{}\" add constraint {} {} on update cascade;".format( + orm_class.__tablename__, + line.conname, + line.pg_get_constraintdef)) + # alter_response = engine.connect().execute(alter_statement) + alter_response = session.execute(alter_statement) + session.commit() + except AttributeError: + print("Attribute Error: {} has no attribute __tablename__".format(orm_class)) \ No newline at end of file From 2ada4d76416b6c813fed0f39c20039f50e0445d5 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 3 Nov 2023 11:48:33 +0100 Subject: [PATCH 12/34] Switches from iterating over the base classes to iterating over all nodes adds get_tree function --- src/pycram/orm/utils.py | 43 +++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index d1d0f0a68..aa302783c 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -1,5 +1,5 @@ import traceback - +from anytree import Node,RenderTree,LevelOrderIter import rospy import sqlalchemy import pycram.orm.base @@ -7,6 +7,7 @@ from pycram.designators.object_designator import * + def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): """ Writes all ORM Objects stored within the given session into a local file. @@ -50,6 +51,19 @@ def get_all_children_set(in_node, node_set=None): all_nodes.update(node_set) return all_nodes + +def get_tree(in_node,parent=None,tree=None): + if parent is None: + node=Node(in_node) + tree=node + else: + node=Node(in_node,parent) + if len(in_node.__subclasses__()): + for subnode in in_node.__subclasses__(): + get_tree(subnode,node,tree) + return tree + + def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session_maker: sqlalchemy.orm.sessionmaker): # source_engine: sqlalchemy.engine.Engine, destination_engine: sqlalchemy.engine.Engine """ @@ -66,7 +80,8 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, source_session = source_session_maker() # sqlalchemy.orm.Session(bind=source_engine) primary_keys = {} print(Base.__subclasses__()) - for table in Base.__subclasses__(): # iterate over all tables + all_orm_classes = get_all_children_set(pycram.orm.base.Base) + for table in all_orm_classes:#Base.__subclasses__(): # iterate over all tables highest_free_key_value = 0 primary_keys[table] = {} list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() @@ -100,7 +115,7 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, highest_free_key_value)) sqlalchemy.orm.attributes.set_attribute(column_object, key.name, highest_free_key_value) highest_free_key_value += 1 - destination_session.commit() # commit after every table + destination_session.commit() # commit after every table destination_session.close() @@ -122,7 +137,8 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, source_session = source_session_maker() objects_to_add = [] try: - for orm_object_class in Base.__subclasses__(): + all_orm_classes=get_all_children_set(pycram.orm.base.Base) + for orm_object_class in all_orm_classes:#Base.__subclasses__(): result = source_session.execute( sqlalchemy.select(orm_object_class).options(sqlalchemy.orm.joinedload('*'))).mappings().all() for row in result: @@ -149,7 +165,14 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session.close() -def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker,orm_classes : list): +def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker, orm_classes: list): + ''' + Iterates through the list of all ORM Classes and sets in their corresponding tables all foreign keys in the given + endpoint to on update cascading. Careful currently only works on postgres databases. + :param session_maker: + :param orm_classes: + :return: empty + ''' with session_maker() as session: for orm_class in orm_classes: try: @@ -165,15 +188,15 @@ def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker,orm drop_statement = sqlalchemy.text( "alter table \"{}\" drop constraint \"{}\";".format(orm_class.__tablename__, line.conname)) - drop_response = session.execute(drop_statement) - # drop_response = engine.connect().execute(drop_statement) + drop_response = session.execute( + drop_statement) # There is no real data coming back for this alter_statement = sqlalchemy.text( "alter table \"{}\" add constraint {} {} on update cascade;".format( orm_class.__tablename__, line.conname, line.pg_get_constraintdef)) - # alter_response = engine.connect().execute(alter_statement) - alter_response = session.execute(alter_statement) + alter_response = session.execute( + alter_statement) # There is no real data coming back for this session.commit() except AttributeError: - print("Attribute Error: {} has no attribute __tablename__".format(orm_class)) \ No newline at end of file + print("Attribute Error: {} has no attribute __tablename__".format(orm_class)) From 09c1b0c198a225b9ea1709941531872ebb2d4015 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 6 Nov 2023 16:40:47 +0100 Subject: [PATCH 13/34] Moves the commits after each table otherwise we get missing primary constrains --- src/pycram/orm/utils.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index aa302783c..fd12a88bf 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -79,11 +79,13 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session = destination_session_maker() # sqlalchemy.orm.Session(bind=destination_engine) source_session = source_session_maker() # sqlalchemy.orm.Session(bind=source_engine) primary_keys = {} - print(Base.__subclasses__()) - all_orm_classes = get_all_children_set(pycram.orm.base.Base) - for table in all_orm_classes:#Base.__subclasses__(): # iterate over all tables + orm_tree=get_tree(pycram.orm.base.Base) + ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] + for table in ordered_orm_classes:#Base.__subclasses__(): # iterate over all tables highest_free_key_value = 0 primary_keys[table] = {} + if table is pycram.orm.base.Base: # The baseclase has no table representation + continue list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() for key in list_of_primary_keys_of_this_table: # make it smart but maybe @@ -136,9 +138,14 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, """ source_session = source_session_maker() objects_to_add = [] + destination_session = destination_session_maker() try: - all_orm_classes=get_all_children_set(pycram.orm.base.Base) - for orm_object_class in all_orm_classes:#Base.__subclasses__(): + orm_tree = get_tree(pycram.orm.base.Base) + ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] + for orm_object_class in ordered_orm_classes:#Base.__subclasses__(): + if orm_object_class is pycram.orm.base.Base: # The baseclase has no table representation + continue + objects_to_add = [] result = source_session.execute( sqlalchemy.select(orm_object_class).options(sqlalchemy.orm.joinedload('*'))).mappings().all() for row in result: @@ -152,17 +159,17 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, else: rospy.logwarn("WARNING: Ignored already detached ORM Object {} ".format( row[key])) + + if len(objects_to_add) < 1: + return + destination_session.add_all(objects_to_add) + destination_session.commit() + except Exception as e: traceback.print_exc() finally: source_session.close() - if len(objects_to_add) < 1: - return - destination_session = destination_session_maker() - - destination_session.add_all(objects_to_add) - destination_session.commit() - destination_session.close() + destination_session.close() def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker, orm_classes: list): From e3527e4e6c95e0bb40bcb58774ec1c63f0d3a15d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 6 Nov 2023 16:41:28 +0100 Subject: [PATCH 14/34] Finally a working verison --- test/test_database_merger.py | 88 ++++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 31af0d047..35e10d226 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -1,5 +1,7 @@ +import json import traceback import unittest +import pathlib import sqlalchemy import pycram.orm.base @@ -16,7 +18,7 @@ from pycram.bullet_world import BulletWorld, Object from pycram.designators.object_designator import * import anytree - +from anytree import Node,RenderTree,LevelOrderIter class ExamplePlans(): def __init__(self): @@ -24,13 +26,13 @@ def __init__(self): self.pr2 = Object("pr2", "robot", "pr2.urdf") self.kitchen = Object("kitchen", "environment", "kitchen.urdf") self.milk = Object("milk", "milk", "milk.stl", pose=Pose([2.5, 2, 1.02]), color=[1, 0, 0, 1]) - self.cereal = Object("cereal", "cereal", "breakfast_cereal.stl", pose=Pose([2.5, 2.3, 1.05]), color=[0, 1, 0, 1]) + self.cereal = Object("cereal", "cereal", "breakfast_cereal.stl", pose=Pose([2.5, 2.3, 1.05]), + color=[0, 1, 0, 1]) self.milk_desig = ObjectDesignatorDescription(names=["milk"]) self.cereal_desig = ObjectDesignatorDescription(names=["cereal"]) self.robot_desig = ObjectDesignatorDescription(names=["pr2"]).resolve() self.kitchen_desig = ObjectDesignatorDescription(names=["kitchen"]) - @with_tree def pick_and_place_plan(self): with simulated_robot: @@ -39,13 +41,15 @@ def pick_and_place_plan(self): pickup_pose = CostmapLocation(target=self.cereal_desig.resolve(), reachable_for=self.robot_desig).resolve() pickup_arm = pickup_pose.reachable_arms[0] NavigateAction(target_locations=[pickup_pose.pose]).resolve().perform() - PickUpAction(object_designator_description=self.cereal_desig, arms=[pickup_arm], grasps=["front"]).resolve().perform() + PickUpAction(object_designator_description=self.cereal_desig, arms=[pickup_arm], + grasps=["front"]).resolve().perform() ParkArmsAction([Arms.BOTH]).resolve().perform() place_island = SemanticCostmapLocation("kitchen_island_surface", self.kitchen_desig.resolve(), - self.cereal_desig.resolve()).resolve() + self.cereal_desig.resolve()).resolve() - place_stand = CostmapLocation(place_island.pose, reachable_for=self.robot_desig, reachable_arm=pickup_arm).resolve() + place_stand = CostmapLocation(place_island.pose, reachable_for=self.robot_desig, + reachable_arm=pickup_arm).resolve() NavigateAction(target_locations=[place_stand.pose]).resolve().perform() @@ -53,13 +57,17 @@ def pick_and_place_plan(self): ParkArmsAction.Action(Arms.BOTH).perform() - def clear_tree(self): # not sure if needed + def clear_tree(self): # not sure if needed pycram.task.reset_tree() +class MergerTestCaseBase(unittest.TestCase): + def assertIsFile(self, in_path): + if not pathlib.Path(in_path).resolve().is_file(): + raise AssertionError("Config File not found:{}".format(in_path)) -#Note: Can't test full functionallity +# Note: Can't test full functionallity class MergeDatabaseTest(unittest.TestCase): source_engine: sqlalchemy.engine.Engine @@ -67,15 +75,22 @@ class MergeDatabaseTest(unittest.TestCase): source_session_maker: sqlalchemy.orm.sessionmaker destination_session_maker: sqlalchemy.orm.sessionmaker + @unittest.skipIf(not (pathlib.Path("test_database_merger.json").resolve().is_file()), + "Config File not found: test_database_merger.json") @classmethod def setUpClass(cls) -> None: super().setUpClass() - cls.source_engine=sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) - cls.destination_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) + with open("test_database_merger.json") as f: + config=json.load(f) + if ("postgres" in config): + connection_string="postgresql+psycopg2://{}:{}@{}:{}/{}".format(config["postgres"]["user"],config["postgres"]["password"],config["postgres"]["ipaddress"],config["postgres"]["port"],config["postgres"]["database"]) + cls.destination_engine=sqlalchemy.create_engine(connection_string,echo=False) + cls.source_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) + # cls.destination_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) cls.source_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.source_engine) cls.destination_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.destination_engine) - source_session=cls.source_session_maker() - destination_session=cls.destination_session_maker() + source_session = cls.source_session_maker() + destination_session = cls.destination_session_maker() pycram.orm.base.Base.metadata.create_all(cls.source_engine) pycram.orm.base.Base.metadata.create_all(cls.destination_engine) source_session.commit() @@ -85,34 +100,34 @@ def setUpClass(cls) -> None: def setUp(self) -> None: super().setUp() - source_session=self.source_session_maker() - destination_session=self.destination_session_maker() - example_plans=ExamplePlans() + source_session = self.source_session_maker() + # destination_session = self.destination_session_maker() + example_plans = ExamplePlans() for i in range(2): try: print("ExamplePlans run {}".format(i)) example_plans.pick_and_place_plan() example_plans.world.reset_bullet_world() - pycram.orm.base.MetaData().description ="Unittest: Example pick and place {}".format(i) + pycram.orm.base.MetaData().description = "Unittest: Example pick and place {}".format(i) except Exception as e: - print("Error: {}\n{}".format(type(e).__name__,e)) + print("Error: {}\n{}".format(type(e).__name__, e)) - source_meta_data=pycram.orm.base.MetaData() - source_meta_data.description= "Not all who wander are lost" + source_meta_data = pycram.orm.base.MetaData() + source_meta_data.description = "Not all who wander are lost" source_meta_data.insert(source_session) pycram.task.task_tree.root.insert(source_session) source_meta_data.reset() - destination_metadata=pycram.orm.base.MetaData() - destination_metadata.description="Not all that glitters is gold" - pycram.task.task_tree.root.insert(destination_session) - destination_metadata.insert(destination_session) - if(source_meta_data==destination_metadata): - print("Then you are lost") + # destination_metadata = pycram.orm.base.MetaData() + # destination_metadata.description = "Not all that glitters is gold" + # pycram.task.task_tree.root.insert(destination_session) + # destination_metadata.insert(destination_session) + # if (source_meta_data == destination_metadata): + # print("Then you are lost") source_session.commit() - destination_session.commit() + # destination_session.commit() example_plans.world.exit() source_session.close() - destination_session.close() + # destination_session.close() def tearDown(self) -> None: super().tearDown() @@ -122,14 +137,17 @@ def TearDownClass(cls): super().TearDownClass() def test_merge_databases(self): - pycram.orm.utils.update_primary_key(self.source_session_maker,self.destination_session_maker)#self.source_engine,self.destination_engine) - pycram.orm.utils.print_database(self.destination_session_maker) - print("Source:"+10*'-') - pycram.orm.utils.print_database(self.source_session_maker) - #pycram.orm.utils.copy_database(self.destination_session_maker,self.source_session_maker) + all_orm_classes_set = pycram.orm.utils.get_all_children_set(pycram.orm.base.Base) + orm_tree = pycram.orm.utils.get_tree(pycram.orm.base.Base) + ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] + pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker,ordered_orm_classes) + pycram.orm.utils.update_primary_key(self.source_session_maker, + self.destination_session_maker) # self.source_engine,self.destination_engine) + # pycram.orm.utils.print_database(self.destination_session_maker) + # print("Source:" + 10 * '-') + # pycram.orm.utils.print_database(self.source_session_maker) + # pycram.orm.utils.copy_database(self.destination_session_maker,self.source_session_maker) pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) + pycram.orm.utils.print_database(self.source_session_maker) # do stuff - - - From 74cf37f4317ce37ca9a0edee4e75b1708e67b141 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 6 Nov 2023 16:43:09 +0100 Subject: [PATCH 15/34] Clean up comments --- test/test_database_merger.py | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 35e10d226..2b9a7fed1 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -1,12 +1,9 @@ import json -import traceback import unittest import pathlib import sqlalchemy import pycram.orm.base -from pycram.designators.action_designator import * -from pycram.designators.object_designator import * import pycram.orm.utils from pycram.designators.action_designator import * @@ -67,7 +64,7 @@ def assertIsFile(self, in_path): raise AssertionError("Config File not found:{}".format(in_path)) -# Note: Can't test full functionallity +# Note: Can't test full functionality class MergeDatabaseTest(unittest.TestCase): source_engine: sqlalchemy.engine.Engine @@ -86,7 +83,6 @@ def setUpClass(cls) -> None: connection_string="postgresql+psycopg2://{}:{}@{}:{}/{}".format(config["postgres"]["user"],config["postgres"]["password"],config["postgres"]["ipaddress"],config["postgres"]["port"],config["postgres"]["database"]) cls.destination_engine=sqlalchemy.create_engine(connection_string,echo=False) cls.source_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) - # cls.destination_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) cls.source_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.source_engine) cls.destination_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.destination_engine) source_session = cls.source_session_maker() @@ -101,7 +97,6 @@ def setUpClass(cls) -> None: def setUp(self) -> None: super().setUp() source_session = self.source_session_maker() - # destination_session = self.destination_session_maker() example_plans = ExamplePlans() for i in range(2): try: @@ -117,17 +112,9 @@ def setUp(self) -> None: source_meta_data.insert(source_session) pycram.task.task_tree.root.insert(source_session) source_meta_data.reset() - # destination_metadata = pycram.orm.base.MetaData() - # destination_metadata.description = "Not all that glitters is gold" - # pycram.task.task_tree.root.insert(destination_session) - # destination_metadata.insert(destination_session) - # if (source_meta_data == destination_metadata): - # print("Then you are lost") source_session.commit() - # destination_session.commit() example_plans.world.exit() source_session.close() - # destination_session.close() def tearDown(self) -> None: super().tearDown() @@ -137,17 +124,12 @@ def TearDownClass(cls): super().TearDownClass() def test_merge_databases(self): - all_orm_classes_set = pycram.orm.utils.get_all_children_set(pycram.orm.base.Base) orm_tree = pycram.orm.utils.get_tree(pycram.orm.base.Base) ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker,ordered_orm_classes) pycram.orm.utils.update_primary_key(self.source_session_maker, - self.destination_session_maker) # self.source_engine,self.destination_engine) - # pycram.orm.utils.print_database(self.destination_session_maker) - # print("Source:" + 10 * '-') - # pycram.orm.utils.print_database(self.source_session_maker) - # pycram.orm.utils.copy_database(self.destination_session_maker,self.source_session_maker) + self.destination_session_maker) + pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) pycram.orm.utils.print_database(self.source_session_maker) -# do stuff From eef2836648505c240730b369b02b23a1f065d870 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 17 Nov 2023 13:04:18 +0100 Subject: [PATCH 16/34] Resets the orm classes as there may have been an error --- src/pycram/orm/action_designator.py | 73 +++++++++++------------------ src/pycram/orm/base.py | 10 ++-- src/pycram/orm/motion_designator.py | 58 +++++++++-------------- src/pycram/orm/object_designator.py | 13 ++--- src/pycram/orm/task.py | 8 ++-- 5 files changed, 62 insertions(+), 100 deletions(-) diff --git a/src/pycram/orm/action_designator.py b/src/pycram/orm/action_designator.py index dd6ab5d83..427dc2eed 100644 --- a/src/pycram/orm/action_designator.py +++ b/src/pycram/orm/action_designator.py @@ -12,8 +12,7 @@ class Action(Base): """ __tablename__ = "Action" dtype = sqlalchemy.Column(sqlalchemy.types.String(255)) - robot_state = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("RobotState.id"), - onupdate="CASCADE") + robot_state = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("RobotState.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -24,8 +23,7 @@ class Action(Base): class ParkArmsAction(Action): """ORM Class of pycram.designators.action_designator.ParkArmsDesignator.""" __tablename__ = "ParkArms" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.Enum(Arms), nullable=False) __mapper_args__ = { @@ -41,11 +39,9 @@ class NavigateAction(Action): """ORM Class of pycram.designators.action_designator.NavigateAction.""" __tablename__ = "Navigate" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id", )) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -60,8 +56,7 @@ def __init__(self, position: Optional[int] = None, orientation: Optional[int] = class MoveTorsoAction(Action): """ORM Class of pycram.designators.action_designator.MoveTorsoAction.""" __tablename__ = "MoveTorso" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) position = sqlalchemy.Column(sqlalchemy.types.Float) __mapper_args__ = { @@ -76,8 +71,7 @@ def __init__(self, position: Optional[float] = None): class SetGripperAction(Action): """ORM Class of pycram.designators.action_designator.SetGripperAction.""" __tablename__ = "SetGripper" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) motion = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) @@ -94,10 +88,9 @@ def __init__(self, gripper: str, motion: str): class Release(Action): """ORM Class of pycram.designators.action_designator.Release.""" __tablename__ = "Release" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -107,11 +100,10 @@ class Release(Action): class GripAction(Action): """ORM Class of pycram.designators.action_designator.GripAction.""" __tablename__ = "Grip" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) gripper = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) effort = sqlalchemy.Column(sqlalchemy.types.Float, nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) # TODO grasped_object __mapper_args__ = { @@ -122,11 +114,10 @@ class GripAction(Action): class PickUpAction(Action): """ORM Class of pycram.designators.action_designator.PickUpAction.""" __tablename__ = "PickUp" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) grasp = sqlalchemy.Column(sqlalchemy.types.String(255)) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -141,13 +132,11 @@ def __init__(self, arm: str, grasp: str): class PlaceAction(Action): """ORM Class of pycram.designators.action_designator.PlaceAction.""" __tablename__ = "Place" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -161,13 +150,11 @@ def __init__(self, arm: str): class TransportAction(Action): """ORM Class of pycram.designators.action_designator.TransportAction.""" __tablename__ = "Transport" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -177,9 +164,8 @@ class TransportAction(Action): class LookAtAction(Action): """ORM Class of pycram.designators.action_designator.LookAtAction.""" __tablename__ = "LookAt" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -189,9 +175,8 @@ class LookAtAction(Action): class DetectAction(Action): """ORM Class of pycram.designators.action_designator.DetectAction.""" __tablename__ = "Detect" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -201,11 +186,10 @@ class DetectAction(Action): class OpenAction(Action): """ORM Class of pycram.designators.action_designator.OpenAction.""" __tablename__ = "Open" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) distance = sqlalchemy.Column(sqlalchemy.types.Float, nullable=False) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -215,8 +199,7 @@ class OpenAction(Action): class CloseAction(Action): """ORM Class of pycram.designators.action_designator.CloseAction.""" __tablename__ = "Close" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), primary_key=True) arm = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=False) __mapper_args__ = { diff --git a/src/pycram/orm/base.py b/src/pycram/orm/base.py index 357adc7bc..1d64d540e 100644 --- a/src/pycram/orm/base.py +++ b/src/pycram/orm/base.py @@ -38,8 +38,7 @@ class Base(sqlalchemy.orm.DeclarativeBase): id = sqlalchemy.Column(sqlalchemy.types.Integer, autoincrement=True, primary_key=True) """Unique integer ID as auto incremented primary key.""" - metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id", onupdate="CASCADE"), - nullable=True) + metadata_id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("MetaData.id"), nullable=True) """Related MetaData Object to store information about the context of this experiment.""" def __repr__(self): @@ -121,7 +120,7 @@ class Quaternion(Base): z = sqlalchemy.Column(sqlalchemy.types.Float) w = sqlalchemy.Column(sqlalchemy.types.Float) - def __init__(self, x: float, y: float, z: float, w: float, metadata_id: Optional[int] = None): + def __init__(self, x: float, y: float, z: float, w: float, metadata_id: Optional[int] = None): super().__init__() self.x = x self.y = y @@ -153,11 +152,10 @@ class RobotState(Base): __tablename__ = "RobotState" - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id", onupdate="CASCADE")) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) """The position of the robot.""" - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, - sqlalchemy.ForeignKey("Quaternion.id", onupdate="CASCADE")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) """The orientation of the robot.""" torso_height = sqlalchemy.Column(sqlalchemy.types.Float) diff --git a/src/pycram/orm/motion_designator.py b/src/pycram/orm/motion_designator.py index 991ec783e..740214550 100644 --- a/src/pycram/orm/motion_designator.py +++ b/src/pycram/orm/motion_designator.py @@ -37,11 +37,9 @@ class MoveMotion(MotionDesignator): :ivar orientation: (Integer) Foreign key to Quaternion table """ __tablename__ = "MoveMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -57,9 +55,8 @@ class PickUpMotion(MotionDesignator): :ivar grasp: (String) Type of grasp used """ __tablename__ = "PickUpMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) grasp = sqlalchemy.Column(sqlalchemy.types.String(255)) @@ -79,14 +76,12 @@ class PlaceMotion(MotionDesignator): :ivar orientation: (Integer) Foreign key to Quaternion table """ __tablename__ = "PlaceMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -103,9 +98,8 @@ class AccessingMotion(MotionDesignator): :ivar drawer_joint: """ __tablename__ = "AccessingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - part_of = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + part_of = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) distance = sqlalchemy.Column(sqlalchemy.types.Float) @@ -126,11 +120,9 @@ class MoveTCPMotion(MotionDesignator): :ivar arm: String specifying which arm to move the TCP of """ __tablename__ = "MoveTCPMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) arm = sqlalchemy.Column(sqlalchemy.types.String(255)) __mapper_args__ = { @@ -148,12 +140,10 @@ class LookingMotion(MotionDesignator): """ __tablename__ = "LookingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") - object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) + object = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -166,12 +156,10 @@ class MoveGripperMotion(MotionDesignator): """ __tablename__ = "MoveGripperMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) motion = sqlalchemy.Column(sqlalchemy.types.String(255)) gripper = sqlalchemy.Column(sqlalchemy.types.String(255)) - front_facing_axis = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), - onupdate="CASCADE") + front_facing_axis = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, } @@ -183,8 +171,7 @@ class DetectingMotion(MotionDesignator): """ __tablename__ = "DetectingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) object_type = sqlalchemy.Column(sqlalchemy.types.String(255)) cam_frame = sqlalchemy.Column(sqlalchemy.types.String(255)) @@ -199,8 +186,7 @@ class WorldStateDetectingMotion(MotionDesignator): """ __tablename__ = "WorldStateDetectingMotion" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Motion.id"), primary_key=True) object_type = sqlalchemy.Column(sqlalchemy.types.String(255)) __mapper_args__ = { diff --git a/src/pycram/orm/object_designator.py b/src/pycram/orm/object_designator.py index dc90cf229..099a3c0b3 100644 --- a/src/pycram/orm/object_designator.py +++ b/src/pycram/orm/object_designator.py @@ -13,9 +13,8 @@ class ObjectDesignator(Base): dtype = sqlalchemy.Column(sqlalchemy.types.String(255)) type = sqlalchemy.Column(sqlalchemy.types.String(255)) name = sqlalchemy.Column(sqlalchemy.types.String(255)) - position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id"), onupdate="CASCADE") - orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id"), - onupdate="CASCADE") + position = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Position.id")) + orientation = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Quaternion.id")) def __init__(self, type: str, name: str): super().__init__() @@ -32,9 +31,8 @@ class ObjectPart(ObjectDesignator): """ORM Class of pycram.designators.object_designator.LocatedObject.""" __tablename__ = "ObjectPart" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE", - primary_key=True) - part_of = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE") + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), primary_key=True) + part_of = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id")) __mapper_args__ = { "polymorphic_identity": __tablename__, @@ -44,8 +42,7 @@ class ObjectPart(ObjectDesignator): class BelieveObject(ObjectDesignator): __tablename__ = "BelieveObject" - id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), onupdate="CASCADE", - primary_key=True) + id = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Object.id"), primary_key=True) __mapper_args__ = { "polymorphic_identity": __tablename__, diff --git a/src/pycram/orm/task.py b/src/pycram/orm/task.py index b5f6a970f..3023a621f 100644 --- a/src/pycram/orm/task.py +++ b/src/pycram/orm/task.py @@ -11,13 +11,12 @@ class TaskTreeNode(Base): """ORM equivalent of pycram.task.TaskTreeNode.""" __tablename__ = "TaskTreeNode" - code = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Code.id", onupdate="CASCADE")) + code = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Code.id")) start_time = sqlalchemy.Column(sqlalchemy.types.DateTime) end_time = sqlalchemy.Column(sqlalchemy.types.DateTime, nullable=True) status = sqlalchemy.Column(sqlalchemy.types.Enum(TaskStatus)) reason = sqlalchemy.Column(sqlalchemy.types.String(255), nullable=True) - parent = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("TaskTreeNode.id", onupdate="CASCADE"), - nullable=True) + parent = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("TaskTreeNode.id"), nullable=True) def __init__(self, code: int = None, start_time: datetime.datetime = None, end_time: datetime.datetime = None, status: str = None, reason: Optional[str] = None, parent: int = None): @@ -35,8 +34,7 @@ class Code(Base): __tablename__ = "Code" function = sqlalchemy.Column(sqlalchemy.types.String(255)) - designator = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), onupdate="CASCADE", - nullable=True) + designator = sqlalchemy.Column(sqlalchemy.types.Integer, sqlalchemy.ForeignKey("Action.id"), nullable=True) def __init__(self, function: str = None, designator: Optional[int] = None): super().__init__() From b95e144f09ece70682546c241cb5fa08866f9b17 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 29 Nov 2023 15:34:08 +0100 Subject: [PATCH 17/34] Updates the utils funciton to work with the new ORM Model --- src/pycram/orm/utils.py | 159 ++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 88 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index fd12a88bf..e437850af 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -1,5 +1,5 @@ import traceback -from anytree import Node,RenderTree,LevelOrderIter +from anytree import Node, RenderTree, LevelOrderIter import rospy import sqlalchemy import pycram.orm.base @@ -7,7 +7,6 @@ from pycram.designators.object_designator import * - def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): """ Writes all ORM Objects stored within the given session into a local file. @@ -32,10 +31,16 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): :param in_sessionmaker: Database Session which should be printed """ memory_session = in_Sessionmaker() - for table in Base.__subclasses__(): - smt = sqlalchemy.select('*').select_from(table) - result = memory_session.execute(smt).all() - rospy.loginfo(result) + tree = get_tree(pycram.orm.base._Base) + all_tables = [node.name for node in LevelOrderIter(tree)] + for table in all_tables: + # for table in Base.__subclasses__(): + try: + smt = sqlalchemy.select('*').select_from(table) + result = memory_session.execute(smt).all() + rospy.loginfo(result) + except sqlalchemy.exc.ArgumentError as e: + print(e) def get_all_children_set(in_node, node_set=None): @@ -52,15 +57,15 @@ def get_all_children_set(in_node, node_set=None): return all_nodes -def get_tree(in_node,parent=None,tree=None): +def get_tree(in_node, parent=None, tree=None): if parent is None: - node=Node(in_node) - tree=node + node = Node(in_node) + tree = node else: - node=Node(in_node,parent) + node = Node(in_node, parent) if len(in_node.__subclasses__()): for subnode in in_node.__subclasses__(): - get_tree(subnode,node,tree) + get_tree(subnode, node, tree) return tree @@ -78,46 +83,45 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, """ destination_session = destination_session_maker() # sqlalchemy.orm.Session(bind=destination_engine) source_session = source_session_maker() # sqlalchemy.orm.Session(bind=source_engine) - primary_keys = {} - orm_tree=get_tree(pycram.orm.base.Base) - ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] - for table in ordered_orm_classes:#Base.__subclasses__(): # iterate over all tables - highest_free_key_value = 0 - primary_keys[table] = {} - if table is pycram.orm.base.Base: # The baseclase has no table representation - continue - list_of_primary_keys_of_this_table = table.__table__.primary_key.columns.values() - for key in list_of_primary_keys_of_this_table: - # make it smart but maybe - all_source_key_values = [] - all_destination_key_values = [] - for key_value_row in source_session.query(key).all(): - all_source_key_values.append(key_value_row[0]) # get all values of key from source session - for key_value_row in destination_session.query(key).all(): - all_destination_key_values.append(key_value_row[0]) # get all values of key from source session - primary_keys[table][key.name] = destination_session.query(key).all() - if all_source_key_values: - if all_destination_key_values: # need to check if destination maybe has more items then source - if max(all_source_key_values) < max(all_destination_key_values): - highest_free_key_value = max(all_destination_key_values) + 1 - else: - highest_free_key_value = max(all_source_key_values) + 1 - else: # if destination values do not exist we use source - highest_free_key_value = max(all_source_key_values) + 1 - for column_object in destination_session.query(table).all(): # iterate over all columns - if column_object.__dict__[key.name] in all_source_key_values: - print("Found primary_key collision in table {} value: {} max value in memory {}".format(table, - column_object.__dict__[ - key.name], - highest_free_key_value)) - rospy.loginfo( - "Found primary_key collision in table {} value: {} max value in memory {}".format(table, - column_object.__dict__[ - key.name], - highest_free_key_value)) - sqlalchemy.orm.attributes.set_attribute(column_object, key.name, highest_free_key_value) - highest_free_key_value += 1 - destination_session.commit() # commit after every table + sortedTables = pycram.orm.base.Base.metadata.sorted_tables + for table in sortedTables: + try: + list_of_primary_keys_of_this_table = table.primary_key.columns.values() + for key in list_of_primary_keys_of_this_table: + # make it smart but maybe + all_source_key_values = [] + all_destination_key_values = [] + # print("table:{}\tprimarykeys:{}\tIdInQuestion:{}\tsourcekeyvalues:{} count:{}".format(table,list_of_primary_keys_of_this_table,key,source_session.query(key).all(),source_session.query(key).count())) + # print("table:{}\tprimarykeys:{}\tIdInQuestion:{}\tdestinationvalues:{} count{}".format(table,list_of_primary_keys_of_this_table,key, destination_session.query(key).all(),destination_session.query(key).count())) + for key_value_row in source_session.query(key).all(): + all_source_key_values.append(key_value_row[0]) # get all values of key from source session + for key_value_row in destination_session.query(key).all(): + all_destination_key_values.append(key_value_row[0]) # get all values of key from source session + + highest_free_key_value = max(max(all_source_key_values, default=0), + max(all_destination_key_values, default=0)) + 1 + results = destination_session.execute(sqlalchemy.select(table)) + for column_object in results: # iterate over all columns + if column_object.__getattr__(key.name) in all_source_key_values: + print("Found primary_key collision in table {} value: {} max value in memory {}".format(table, + column_object.__getattr__( + key.name), + highest_free_key_value)) + rospy.loginfo( + "Found primary_key collision in table {} value: {} max value in memory {}".format(table, + column_object.__getattr__( + key.name), + highest_free_key_value)) + mini_dict = {} + mini_dict[key.name] = highest_free_key_value + update_statment = sqlalchemy.update(table).where( + table.c.id == column_object.__getattr__(key)).values(mini_dict) + destination_session.execute(update_statment) + highest_free_key_value += 1 + destination_session.commit() # commit after every table + except AttributeError as e: + print(e) + print("Possible found abstract ORM class {}".format(e.__name__)) destination_session.close() @@ -137,34 +141,14 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, :param destination_session_maker: Sessionmaker of the destination database """ source_session = source_session_maker() - objects_to_add = [] destination_session = destination_session_maker() try: - orm_tree = get_tree(pycram.orm.base.Base) - ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] - for orm_object_class in ordered_orm_classes:#Base.__subclasses__(): - if orm_object_class is pycram.orm.base.Base: # The baseclase has no table representation - continue - objects_to_add = [] - result = source_session.execute( - sqlalchemy.select(orm_object_class).options(sqlalchemy.orm.joinedload('*'))).mappings().all() - for row in result: - for key in row: - if not sqlalchemy.inspect(row[key]).detached and not sqlalchemy.inspect( - row[key]).transient and not sqlalchemy.inspect(row[key]).deleted: - source_session.refresh(row[key]) # get newest value - source_session.expunge(row[key]) - sqlalchemy.orm.make_transient(row[key]) - objects_to_add.append(row[key]) - else: - rospy.logwarn("WARNING: Ignored already detached ORM Object {} ".format( - row[key])) - - if len(objects_to_add) < 1: - return - destination_session.add_all(objects_to_add) - destination_session.commit() - + sortedTables = pycram.orm.base.Base.metadata.sorted_tables + for table in sortedTables: + for value in source_session.query(table).all(): + insert_statment = sqlalchemy.insert(table).values(value) + destination_session.execute(insert_statment) + destination_session.commit() # commit after every table except Exception as e: traceback.print_exc() finally: @@ -172,38 +156,37 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session.close() -def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker, orm_classes: list): +def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): ''' - Iterates through the list of all ORM Classes and sets in their corresponding tables all foreign keys in the given - endpoint to on update cascading. Careful currently only works on postgres databases. + Iterates through all tables related to any ORM Class and sets in their corresponding foreign keys in the given + endpoint to "ON UPDATE CASCADING". Careful currently only works on postgres databases. :param session_maker: - :param orm_classes: :return: empty ''' with session_maker() as session: - for orm_class in orm_classes: + for table in pycram.orm.base.Base.metadata.sorted_tables: try: foreign_key_statement = sqlalchemy.text( "SELECT con.oid, con.conname, con.contype, con.confupdtype, con.confdeltype, con.confmatchtype, pg_get_constraintdef(con.oid) FROM pg_catalog.pg_constraint con INNER JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid INNER JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace WHERE rel.relname = '{}';".format( - orm_class.__tablename__)) - response = session.execute(foreign_key_statement) # engine.connect().execute(foreign_key_statement) - print(25 * '~' + "{}".format(orm_class.__tablename__) + 25 * '~') + table)) + response = session.execute(foreign_key_statement) + print(25 * '~' + "{}".format(table) + 25 * '~') for line in response: if line.conname.endswith("fkey"): if 'a' in line.confupdtype: # a --> no action | if there is no action we set it to cascading # I just assume there aren't any other constraints drop_statement = sqlalchemy.text( - "alter table \"{}\" drop constraint \"{}\";".format(orm_class.__tablename__, + "alter table \"{}\" drop constraint \"{}\";".format(table, line.conname)) drop_response = session.execute( drop_statement) # There is no real data coming back for this alter_statement = sqlalchemy.text( "alter table \"{}\" add constraint {} {} on update cascade;".format( - orm_class.__tablename__, + table, line.conname, line.pg_get_constraintdef)) alter_response = session.execute( alter_statement) # There is no real data coming back for this session.commit() except AttributeError: - print("Attribute Error: {} has no attribute __tablename__".format(orm_class)) + print("Attribute Error: {} has no attribute __tablename__".format(table)) From 0e658d295505ea8081ed18334dce5f9331aa0796 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Wed, 29 Nov 2023 15:35:01 +0100 Subject: [PATCH 18/34] Changes the test of the database merger to work with the new Utils functions --- test/test_database_merger.py | 80 +++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 33 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 2b9a7fed1..219bf624f 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -1,7 +1,7 @@ import json import unittest import pathlib - +import yaml import sqlalchemy import pycram.orm.base import pycram.orm.utils @@ -9,22 +9,38 @@ from pycram.designators.action_designator import * from pycram.designators.location_designator import * from pycram.process_module import simulated_robot -from pycram.enums import Arms +from pycram.enums import Arms, ObjectType from pycram.task import with_tree import pycram.task from pycram.bullet_world import BulletWorld, Object from pycram.designators.object_designator import * import anytree -from anytree import Node,RenderTree,LevelOrderIter +from anytree import Node, RenderTree, LevelOrderIter + + +class Configuration: + def __init__(self, path="test_database_merger.yaml"): + with open(path) as f: + yaml_data = yaml.safe_load(f) + try: + self.user = yaml_data["postgres"]["user"] + self.password = yaml_data["postgres"]["password"] + self.ipaddress = yaml_data["postgres"]["ipaddress"] + self.port = yaml_data["postgres"]["port"] + self.database = yaml_data["postgres"]["database"] + except yaml.YAMLError as exc: + print("Error with the YAML File {}", format(exc)) + except KeyError as e: + print("Missing key in YAML File make sure everything that is needed is there: {}".format(e)) + class ExamplePlans(): def __init__(self): self.world = BulletWorld("DIRECT") - self.pr2 = Object("pr2", "robot", "pr2.urdf") - self.kitchen = Object("kitchen", "environment", "kitchen.urdf") - self.milk = Object("milk", "milk", "milk.stl", pose=Pose([2.5, 2, 1.02]), color=[1, 0, 0, 1]) - self.cereal = Object("cereal", "cereal", "breakfast_cereal.stl", pose=Pose([2.5, 2.3, 1.05]), - color=[0, 1, 0, 1]) + self.pr2 = Object("pr2", ObjectType.ROBOT, "pr2.urdf") + self.kitchen = Object("kitchen", ObjectType.ENVIRONMENT, "kitchen.urdf") + self.milk = Object("milk", ObjectType.MILK, "milk.stl", pose=Pose([1.3, 1, 0.9])) + self.cereal = Object("cereal", ObjectType.BREAKFAST_CEREAL, "breakfast_cereal.stl", pose=Pose([1.3, 0.7, 0.95])) self.milk_desig = ObjectDesignatorDescription(names=["milk"]) self.cereal_desig = ObjectDesignatorDescription(names=["cereal"]) self.robot_desig = ObjectDesignatorDescription(names=["pr2"]).resolve() @@ -54,9 +70,6 @@ def pick_and_place_plan(self): ParkArmsAction.Action(Arms.BOTH).perform() - def clear_tree(self): # not sure if needed - pycram.task.reset_tree() - class MergerTestCaseBase(unittest.TestCase): def assertIsFile(self, in_path): @@ -71,17 +84,18 @@ class MergeDatabaseTest(unittest.TestCase): destination_engine: sqlalchemy.engine.Engine source_session_maker: sqlalchemy.orm.sessionmaker destination_session_maker: sqlalchemy.orm.sessionmaker + numbers_of_example_runs: int - @unittest.skipIf(not (pathlib.Path("test_database_merger.json").resolve().is_file()), - "Config File not found: test_database_merger.json") + @unittest.skipIf(not (pathlib.Path("test_database_merger.yaml").resolve().is_file()), + "Config File not found: test_database_merger.yaml") @classmethod def setUpClass(cls) -> None: super().setUpClass() - with open("test_database_merger.json") as f: - config=json.load(f) - if ("postgres" in config): - connection_string="postgresql+psycopg2://{}:{}@{}:{}/{}".format(config["postgres"]["user"],config["postgres"]["password"],config["postgres"]["ipaddress"],config["postgres"]["port"],config["postgres"]["database"]) - cls.destination_engine=sqlalchemy.create_engine(connection_string,echo=False) + config = Configuration("test_database_merger.yaml") + connection_string = "postgresql+psycopg2://{}:{}@{}:{}/{}".format(config.user, config.password, + config.ipaddress, config.port, + config.database) + cls.destination_engine = sqlalchemy.create_engine(connection_string, echo=False) cls.source_engine = sqlalchemy.create_engine("sqlite+pysqlite:///:memory:", echo=False) cls.source_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.source_engine) cls.destination_session_maker = sqlalchemy.orm.sessionmaker(bind=cls.destination_engine) @@ -93,25 +107,24 @@ def setUpClass(cls) -> None: destination_session.commit() source_session.close() destination_session.close() + cls.numbers_of_example_runs=3 def setUp(self) -> None: super().setUp() source_session = self.source_session_maker() example_plans = ExamplePlans() - for i in range(2): + for i in range(self.numbers_of_example_runs): try: print("ExamplePlans run {}".format(i)) example_plans.pick_and_place_plan() example_plans.world.reset_bullet_world() - pycram.orm.base.MetaData().description = "Unittest: Example pick and place {}".format(i) + process_meta_data = pycram.orm.base.ProcessMetaData() + process_meta_data.description = "Database merger Unittest: Example pick and place {}".format(i) + process_meta_data.insert(source_session) + pycram.task.task_tree.root.insert(source_session) + process_meta_data.reset() except Exception as e: print("Error: {}\n{}".format(type(e).__name__, e)) - - source_meta_data = pycram.orm.base.MetaData() - source_meta_data.description = "Not all who wander are lost" - source_meta_data.insert(source_session) - pycram.task.task_tree.root.insert(source_session) - source_meta_data.reset() source_session.commit() example_plans.world.exit() source_session.close() @@ -124,12 +137,13 @@ def TearDownClass(cls): super().TearDownClass() def test_merge_databases(self): - orm_tree = pycram.orm.utils.get_tree(pycram.orm.base.Base) - ordered_orm_classes = [node.name for node in LevelOrderIter(orm_tree)] - pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker,ordered_orm_classes) - pycram.orm.utils.update_primary_key(self.source_session_maker, - self.destination_session_maker) + with self.destination_session_maker() as session: + amount_before_of_process_meta_data=session.query(pycram.orm.base.ProcessMetaData).count() + pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker) + pycram.orm.utils.update_primary_key(self.source_session_maker,self.destination_session_maker) pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) - pycram.orm.utils.print_database(self.source_session_maker) - + # test ideas Count if more seemed to work (insert something so random and see if it is there in the end?) + with self.destination_session_maker() as session: + amount_after_of_process_meta_data = session.query(pycram.orm.base.ProcessMetaData).count() + self.assertTrue(amount_before_of_process_meta_data Date: Fri, 1 Dec 2023 14:16:00 +0100 Subject: [PATCH 19/34] Fixes write_database_to_file Function --- src/pycram/orm/utils.py | 47 +++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index e437850af..7e6612863 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -5,32 +5,37 @@ import pycram.orm.base from pycram.designators.action_designator import * from pycram.designators.object_designator import * +import json -def write_database_to_file(in_session: sqlalchemy.orm.session, filename: str, b_write_to_console: bool = False): +def write_database_to_file(in_sessionmaker: sqlalchemy.orm.sessionmaker, filename: str, + b_write_to_console: bool = False): """ - Writes all ORM Objects stored within the given session into a local file. + Writes all Tables stored within the given session into a local file. - :param in_session: Database Session which should be logged + :param in_sessionmaker: sessionmaker that allows us to access the Database :param filename: Filename of the logfile :param b_write_to_console: enables writing to the console. Default false """ - with open(filename, "w") as f: - for table in Base.__subclasses__(): - for column_object in in_session.query(table).all(): - if b_write_to_console: - rospy.loginfo("I am writing: {}".format(str(column_object.__dict__))) - f.write(str(column_object.__dict__)) - f.write("\n") - - -def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): + with in_sessionmaker() as session: + with open("whatever.txt", "w") as f: + to_json_dict = dict() + for table in pycram.orm.base.Base.metadata.sorted_tables: + list_of_row = list() + for column_object in session.query(table).all(): + list_of_row.append(column_object) + to_json_dict[table.name] = list_of_row + json_data_dict = json.dumps(to_json_dict, default=str) + f.write(json_data_dict) + + +def print_database(in_sessionmaker: sqlalchemy.orm.sessionmaker): """ Prints all ORM Class data within the given Session. :param in_sessionmaker: Database Session which should be printed """ - memory_session = in_Sessionmaker() + memory_session = in_sessionmaker() tree = get_tree(pycram.orm.base._Base) all_tables = [node.name for node in LevelOrderIter(tree)] for table in all_tables: @@ -43,20 +48,6 @@ def print_database(in_Sessionmaker: sqlalchemy.orm.sessionmaker): print(e) -def get_all_children_set(in_node, node_set=None): - all_nodes = set() - if node_set is None: - node_set = set() - node_set.add(in_node) - if in_node.__subclasses__(): - for node in in_node.__subclasses__(): - all_nodes.update(get_all_children_set(node, node_set)) - else: - pass - all_nodes.update(node_set) - return all_nodes - - def get_tree(in_node, parent=None, tree=None): if parent is None: node = Node(in_node) From 7a6a4ef0cf1578f0e077eab795220b8257a5422c Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 1 Dec 2023 14:24:41 +0100 Subject: [PATCH 20/34] Fixes print_database function --- src/pycram/orm/utils.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 7e6612863..a93497c3d 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -11,7 +11,7 @@ def write_database_to_file(in_sessionmaker: sqlalchemy.orm.sessionmaker, filename: str, b_write_to_console: bool = False): """ - Writes all Tables stored within the given session into a local file. + Writes all Tables stored within the given session into a local file. File will be written in JSON Format :param in_sessionmaker: sessionmaker that allows us to access the Database :param filename: Filename of the logfile @@ -35,17 +35,14 @@ def print_database(in_sessionmaker: sqlalchemy.orm.sessionmaker): :param in_sessionmaker: Database Session which should be printed """ - memory_session = in_sessionmaker() - tree = get_tree(pycram.orm.base._Base) - all_tables = [node.name for node in LevelOrderIter(tree)] - for table in all_tables: - # for table in Base.__subclasses__(): - try: - smt = sqlalchemy.select('*').select_from(table) - result = memory_session.execute(smt).all() - rospy.loginfo(result) - except sqlalchemy.exc.ArgumentError as e: - print(e) + with in_sessionmaker() as session: + for table in pycram.orm.base.Base.metadata.sorted_tables: + try: + smt = sqlalchemy.select('*').select_from(table) + result = session.execute(smt).all() + rospy.loginfo("Table: {}\tcontent:{}".format(table,result)) + except sqlalchemy.exc.ArgumentError as e: + print(e) def get_tree(in_node, parent=None, tree=None): From b1d8a0920ac4b7966f8c1fc86d468d93cc33f7b4 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 1 Dec 2023 14:25:46 +0100 Subject: [PATCH 21/34] Deletes get_tree function (deprecated) --- src/pycram/orm/utils.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index a93497c3d..49f2af3c9 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -44,19 +44,6 @@ def print_database(in_sessionmaker: sqlalchemy.orm.sessionmaker): except sqlalchemy.exc.ArgumentError as e: print(e) - -def get_tree(in_node, parent=None, tree=None): - if parent is None: - node = Node(in_node) - tree = node - else: - node = Node(in_node, parent) - if len(in_node.__subclasses__()): - for subnode in in_node.__subclasses__(): - get_tree(subnode, node, tree) - return tree - - def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session_maker: sqlalchemy.orm.sessionmaker): # source_engine: sqlalchemy.engine.Engine, destination_engine: sqlalchemy.engine.Engine """ From 04f2df4808909991521385b95d69908c943dc359 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 1 Dec 2023 14:34:03 +0100 Subject: [PATCH 22/34] Clean up & updates documentation --- src/pycram/orm/utils.py | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 49f2af3c9..6c1604f79 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -40,12 +40,13 @@ def print_database(in_sessionmaker: sqlalchemy.orm.sessionmaker): try: smt = sqlalchemy.select('*').select_from(table) result = session.execute(smt).all() - rospy.loginfo("Table: {}\tcontent:{}".format(table,result)) + rospy.loginfo("Table: {}\tcontent:{}".format(table, result)) except sqlalchemy.exc.ArgumentError as e: print(e) + def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, - destination_session_maker: sqlalchemy.orm.sessionmaker): # source_engine: sqlalchemy.engine.Engine, destination_engine: sqlalchemy.engine.Engine + destination_session_maker: sqlalchemy.orm.sessionmaker): """ Updates all the primary keys of the database associated with the destination engine, so that there will be no problems when merging it into the source database. In order to achieve this the highest id value of the source @@ -53,21 +54,18 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, Cascading triggers in the database will take care of the rest. Careful 2023 this will not work in memory databases as there are no triggers. - :param source_engine: Engine of the source data_base - :param destination_engine: Engine of the destination data_base + :param source_session_maker: Session maker of the source data_base + :param destination_session_maker: Session maker of the destination data_base """ - destination_session = destination_session_maker() # sqlalchemy.orm.Session(bind=destination_engine) - source_session = source_session_maker() # sqlalchemy.orm.Session(bind=source_engine) + destination_session = destination_session_maker() + source_session = source_session_maker() sortedTables = pycram.orm.base.Base.metadata.sorted_tables for table in sortedTables: try: list_of_primary_keys_of_this_table = table.primary_key.columns.values() for key in list_of_primary_keys_of_this_table: - # make it smart but maybe all_source_key_values = [] all_destination_key_values = [] - # print("table:{}\tprimarykeys:{}\tIdInQuestion:{}\tsourcekeyvalues:{} count:{}".format(table,list_of_primary_keys_of_this_table,key,source_session.query(key).all(),source_session.query(key).count())) - # print("table:{}\tprimarykeys:{}\tIdInQuestion:{}\tdestinationvalues:{} count{}".format(table,list_of_primary_keys_of_this_table,key, destination_session.query(key).all(),destination_session.query(key).count())) for key_value_row in source_session.query(key).all(): all_source_key_values.append(key_value_row[0]) # get all values of key from source session for key_value_row in destination_session.query(key).all(): @@ -87,23 +85,23 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, column_object.__getattr__( key.name), highest_free_key_value)) - mini_dict = {} + mini_dict = dict() mini_dict[key.name] = highest_free_key_value - update_statment = sqlalchemy.update(table).where( + update_statement = sqlalchemy.update(table).where( table.c.id == column_object.__getattr__(key)).values(mini_dict) - destination_session.execute(update_statment) + destination_session.execute(update_statement) highest_free_key_value += 1 destination_session.commit() # commit after every table except AttributeError as e: - print(e) print("Possible found abstract ORM class {}".format(e.__name__)) + print(e) destination_session.close() def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session_maker: sqlalchemy.orm.sessionmaker): """ - Iterates through all ORM Objects within tht source database and merges them into the destination database. Careful + Iterates through all tables within tht source database and merges them into the destination database. Careful this function does not check if there are any primary key collisions or updates any data. .. note:: @@ -118,11 +116,11 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, source_session = source_session_maker() destination_session = destination_session_maker() try: - sortedTables = pycram.orm.base.Base.metadata.sorted_tables - for table in sortedTables: + sorted_tables = pycram.orm.base.Base.metadata.sorted_tables + for table in sorted_tables: for value in source_session.query(table).all(): - insert_statment = sqlalchemy.insert(table).values(value) - destination_session.execute(insert_statment) + insert_statement = sqlalchemy.insert(table).values(value) + destination_session.execute(insert_statement) destination_session.commit() # commit after every table except Exception as e: traceback.print_exc() @@ -149,7 +147,7 @@ def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): for line in response: if line.conname.endswith("fkey"): if 'a' in line.confupdtype: # a --> no action | if there is no action we set it to cascading - # I just assume there aren't any other constraints + # Assumes there aren't any other constraints drop_statement = sqlalchemy.text( "alter table \"{}\" drop constraint \"{}\";".format(table, line.conname)) From e41e726f7aa3e5144b1df81e6061ac3a419673bb Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 1 Dec 2023 14:47:58 +0100 Subject: [PATCH 23/34] Changes the tst to work with the new ORM Model --- test/test_database_merger.py | 46 ++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 219bf624f..9a1ffa243 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -1,7 +1,6 @@ -import json import unittest import pathlib -import yaml +import json import sqlalchemy import pycram.orm.base import pycram.orm.utils @@ -12,26 +11,18 @@ from pycram.enums import Arms, ObjectType from pycram.task import with_tree import pycram.task -from pycram.bullet_world import BulletWorld, Object +from pycram.bullet_world import Object from pycram.designators.object_designator import * -import anytree -from anytree import Node, RenderTree, LevelOrderIter +from dataclasses import dataclass +@dataclass class Configuration: - def __init__(self, path="test_database_merger.yaml"): - with open(path) as f: - yaml_data = yaml.safe_load(f) - try: - self.user = yaml_data["postgres"]["user"] - self.password = yaml_data["postgres"]["password"] - self.ipaddress = yaml_data["postgres"]["ipaddress"] - self.port = yaml_data["postgres"]["port"] - self.database = yaml_data["postgres"]["database"] - except yaml.YAMLError as exc: - print("Error with the YAML File {}", format(exc)) - except KeyError as e: - print("Missing key in YAML File make sure everything that is needed is there: {}".format(e)) + user: str + password: str + ipaddress: str + port: int + database: str class ExamplePlans(): @@ -86,12 +77,14 @@ class MergeDatabaseTest(unittest.TestCase): destination_session_maker: sqlalchemy.orm.sessionmaker numbers_of_example_runs: int - @unittest.skipIf(not (pathlib.Path("test_database_merger.yaml").resolve().is_file()), - "Config File not found: test_database_merger.yaml") + @unittest.skipIf(not (pathlib.Path("test_database_merger.json").resolve().is_file()), + "Config File not found: test_database_merger.json") @classmethod def setUpClass(cls) -> None: super().setUpClass() - config = Configuration("test_database_merger.yaml") + with open("test_database_merger.json") as f: + json_data = json.load(f) + config = Configuration(**json_data) connection_string = "postgresql+psycopg2://{}:{}@{}:{}/{}".format(config.user, config.password, config.ipaddress, config.port, config.database) @@ -107,7 +100,7 @@ def setUpClass(cls) -> None: destination_session.commit() source_session.close() destination_session.close() - cls.numbers_of_example_runs=3 + cls.numbers_of_example_runs = 3 def setUp(self) -> None: super().setUp() @@ -138,12 +131,13 @@ def TearDownClass(cls): def test_merge_databases(self): with self.destination_session_maker() as session: - amount_before_of_process_meta_data=session.query(pycram.orm.base.ProcessMetaData).count() + amount_before_of_process_meta_data = session.query(pycram.orm.base.ProcessMetaData).count() pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker) - pycram.orm.utils.update_primary_key(self.source_session_maker,self.destination_session_maker) + pycram.orm.utils.update_primary_key(self.source_session_maker, self.destination_session_maker) pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) - # test ideas Count if more seemed to work (insert something so random and see if it is there in the end?) with self.destination_session_maker() as session: amount_after_of_process_meta_data = session.query(pycram.orm.base.ProcessMetaData).count() - self.assertTrue(amount_before_of_process_meta_data Date: Fri, 1 Dec 2023 14:49:13 +0100 Subject: [PATCH 24/34] Changes doc-URL to newest version --- src/pycram/orm/base.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pycram/orm/base.py b/src/pycram/orm/base.py index dad386fe7..305b4b7b5 100644 --- a/src/pycram/orm/base.py +++ b/src/pycram/orm/base.py @@ -61,7 +61,7 @@ def process_metadata(self): class MapperArgsMixin: """ MapperArgsMixin stores __mapper_args__ information for certain subclass-tables. - For information about Mixins, see https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html + For information about Mixins, see https://docs.sqlalchemy.org/en/20/orm/declarative_mixins.html """ __abstract__ = True @@ -74,7 +74,7 @@ def __mapper_args__(self): class PositionMixin: """ PositionMixin holds a foreign key column and its relationship to the referenced table. - For information about Mixins, see https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html + For information about Mixins, see https://docs.sqlalchemy.org/en/20/orm/declarative_mixins.html """ __abstract__ = True @@ -92,7 +92,7 @@ def position(self): class QuaternionMixin: """ QuaternionMixin holds a foreign key column and its relationship to the referenced table. - For information about Mixins, see https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html + For information about Mixins, see https://docs.sqlalchemy.org/en/20/orm/declarative_mixins.html """ __abstract__ = True @@ -110,7 +110,7 @@ def orientation(self): class PoseMixin: """ PoseMixin holds a foreign key column and its relationship to the referenced table. - For information about Mixins, see https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html + For information about Mixins, see https://docs.sqlalchemy.org/en/20/orm/declarative_mixins.html """ __abstract__ = True From 3cde3e28da8d3f3aacaae7a5687fb15138c920c9 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 1 Dec 2023 14:50:11 +0100 Subject: [PATCH 25/34] Updates function doc string --- src/pycram/orm/utils.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 6c1604f79..2f194b08f 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -113,26 +113,23 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, :param source_session_maker: Sessionmaker of the source database :param destination_session_maker: Sessionmaker of the destination database """ - source_session = source_session_maker() - destination_session = destination_session_maker() - try: + + with source_session_maker() as source_session, destination_session_maker() as destination_session: sorted_tables = pycram.orm.base.Base.metadata.sorted_tables for table in sorted_tables: for value in source_session.query(table).all(): insert_statement = sqlalchemy.insert(table).values(value) destination_session.execute(insert_statement) destination_session.commit() # commit after every table - except Exception as e: - traceback.print_exc() - finally: - source_session.close() - destination_session.close() - def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): ''' Iterates through all tables related to any ORM Class and sets in their corresponding foreign keys in the given - endpoint to "ON UPDATE CASCADING". Careful currently only works on postgres databases. + endpoint to "ON UPDATE CASCADING". + + .. note:: + Careful currently only works on postgres databases. + :param session_maker: :return: empty ''' From 18b25fd2fcc327adad7cb736fc236a973253e74d Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 8 Dec 2023 14:56:10 +0100 Subject: [PATCH 26/34] Changes all print functions to the rospy.logs --- src/pycram/orm/utils.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 2f194b08f..1eabe1f35 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -42,7 +42,7 @@ def print_database(in_sessionmaker: sqlalchemy.orm.sessionmaker): result = session.execute(smt).all() rospy.loginfo("Table: {}\tcontent:{}".format(table, result)) except sqlalchemy.exc.ArgumentError as e: - print(e) + rospy.logwarn(e) def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, @@ -76,10 +76,6 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, results = destination_session.execute(sqlalchemy.select(table)) for column_object in results: # iterate over all columns if column_object.__getattr__(key.name) in all_source_key_values: - print("Found primary_key collision in table {} value: {} max value in memory {}".format(table, - column_object.__getattr__( - key.name), - highest_free_key_value)) rospy.loginfo( "Found primary_key collision in table {} value: {} max value in memory {}".format(table, column_object.__getattr__( @@ -93,8 +89,8 @@ def update_primary_key(source_session_maker: sqlalchemy.orm.sessionmaker, highest_free_key_value += 1 destination_session.commit() # commit after every table except AttributeError as e: - print("Possible found abstract ORM class {}".format(e.__name__)) - print(e) + rospy.logwarn("Possible found abstract ORM class {}".format(e.__name__)) + rospy.logwarn(e) destination_session.close() @@ -140,7 +136,7 @@ def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): "SELECT con.oid, con.conname, con.contype, con.confupdtype, con.confdeltype, con.confmatchtype, pg_get_constraintdef(con.oid) FROM pg_catalog.pg_constraint con INNER JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid INNER JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace WHERE rel.relname = '{}';".format( table)) response = session.execute(foreign_key_statement) - print(25 * '~' + "{}".format(table) + 25 * '~') + rospy.loginfo(25 * '~' + "{}".format(table) + 25 * '~') for line in response: if line.conname.endswith("fkey"): if 'a' in line.confupdtype: # a --> no action | if there is no action we set it to cascading @@ -159,4 +155,4 @@ def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): alter_statement) # There is no real data coming back for this session.commit() except AttributeError: - print("Attribute Error: {} has no attribute __tablename__".format(table)) + rospy.loginfo("Attribute Error: {} has no attribute __tablename__".format(table)) From 17592b4b49d3224a7a96713f53e9bd531098282f Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Fri, 8 Dec 2023 16:04:15 +0100 Subject: [PATCH 27/34] Adds default config and union test --- test/test_database_merger.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 9a1ffa243..08301e275 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -24,8 +24,16 @@ class Configuration: port: int database: str + def __init__(self, in_user="alice", in_password="alice123", in_ipaddress="localhost", in_port=5432, + in_database="pycram"): + self.user = in_user + self.password = in_password + self.ipaddress = in_ipaddress + self.port = in_port + self.database = in_database -class ExamplePlans(): + +class ExamplePlans: def __init__(self): self.world = BulletWorld("DIRECT") self.pr2 = Object("pr2", ObjectType.ROBOT, "pr2.urdf") @@ -130,14 +138,22 @@ def TearDownClass(cls): super().TearDownClass() def test_merge_databases(self): - with self.destination_session_maker() as session: - amount_before_of_process_meta_data = session.query(pycram.orm.base.ProcessMetaData).count() - pycram.orm.utils.update_primary_key_constrains(self.destination_session_maker) pycram.orm.utils.update_primary_key(self.source_session_maker, self.destination_session_maker) pycram.orm.utils.copy_database(self.source_session_maker, self.destination_session_maker) + destination_content = dict() + source_content = dict() with self.destination_session_maker() as session: - amount_after_of_process_meta_data = session.query(pycram.orm.base.ProcessMetaData).count() - self.assertTrue(amount_before_of_process_meta_data < amount_after_of_process_meta_data) - self.assertEqual(amount_before_of_process_meta_data + self.numbers_of_example_runs, - amount_after_of_process_meta_data) + for table in pycram.orm.base.Base.metadata.sorted_tables: + table_content_set = set() + table_content_set.update(session.query(table).all()) + destination_content[table] = table_content_set + + with self.source_session_maker() as session: + for table in pycram.orm.base.Base.metadata.sorted_tables: + table_content_set = set() + table_content_set.update(session.query(table).all()) + source_content[table] = table_content_set + + for key in destination_content: + self.assertEqual(destination_content[key], destination_content[key].union(source_content[key])) From 7210da1ce0f3d21c7129c2c431b7b8494fc2f776 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 12 Dec 2023 12:39:47 +0100 Subject: [PATCH 28/34] Adds the migrate_neems function --- src/pycram/orm/utils.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/pycram/orm/utils.py b/src/pycram/orm/utils.py index 1eabe1f35..5efe3a2e6 100644 --- a/src/pycram/orm/utils.py +++ b/src/pycram/orm/utils.py @@ -7,6 +7,13 @@ from pycram.designators.object_designator import * import json +from pycram.designators.action_designator import * +from pycram.designators.location_designator import * +from pycram.process_module import simulated_robot +from pycram.enums import Arms, ObjectType +from pycram.task import with_tree +import pycram.orm + def write_database_to_file(in_sessionmaker: sqlalchemy.orm.sessionmaker, filename: str, b_write_to_console: bool = False): @@ -118,6 +125,7 @@ def copy_database(source_session_maker: sqlalchemy.orm.sessionmaker, destination_session.execute(insert_statement) destination_session.commit() # commit after every table + def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): ''' Iterates through all tables related to any ORM Class and sets in their corresponding foreign keys in the given @@ -156,3 +164,23 @@ def update_primary_key_constrains(session_maker: sqlalchemy.orm.sessionmaker): session.commit() except AttributeError: rospy.loginfo("Attribute Error: {} has no attribute __tablename__".format(table)) + + +def migrate_neems(source_session_maker: sqlalchemy.orm.sessionmaker, + destination_session_maker: sqlalchemy.orm.sessionmaker): + """ + Merges the database connected to the source session maker into the database connected to the destination session + maker. Will first update the primary constrains inside the destination database (if needed). Afterwards + updates the primary keys within the destination database (as there are cascading updates now) and then merges + the source database into the destination. + + .. note:: + Assumes the destination database is a postgres database + + :param source_session_maker: Sessionmaker of the source database + :param destination_session_maker: Sessionmaker of the destination database + """ + + update_primary_key_constrains(destination_session_maker) + update_primary_key(source_session_maker, destination_session_maker) + copy_database(source_session_maker, destination_session_maker) From 6fb11f013a74747583ffd5d374f4efb02a8f16fb Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 12 Dec 2023 13:46:56 +0100 Subject: [PATCH 29/34] Improves configuration class and adds test for the new migrate_neems function --- test/test_database_merger.py | 39 +++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/test/test_database_merger.py b/test/test_database_merger.py index 08301e275..f3e8b0472 100644 --- a/test/test_database_merger.py +++ b/test/test_database_merger.py @@ -13,24 +13,16 @@ import pycram.task from pycram.bullet_world import Object from pycram.designators.object_designator import * -from dataclasses import dataclass +from dataclasses import dataclass, field @dataclass class Configuration: - user: str - password: str - ipaddress: str - port: int - database: str - - def __init__(self, in_user="alice", in_password="alice123", in_ipaddress="localhost", in_port=5432, - in_database="pycram"): - self.user = in_user - self.password = in_password - self.ipaddress = in_ipaddress - self.port = in_port - self.database = in_database + user: str = field(default="alice") + password: str = field(default="alice123") + ipaddress: str = field(default="localhost") + port: int = field(default=5432) + database: str = field(default="pycram") class ExamplePlans: @@ -157,3 +149,22 @@ def test_merge_databases(self): for key in destination_content: self.assertEqual(destination_content[key], destination_content[key].union(source_content[key])) + + def test_migrate_neems(self): + pycram.orm.utils.migrate_neems(self.source_session_maker,self.destination_session_maker) + destination_content = dict() + source_content = dict() + with self.destination_session_maker() as session: + for table in pycram.orm.base.Base.metadata.sorted_tables: + table_content_set = set() + table_content_set.update(session.query(table).all()) + destination_content[table] = table_content_set + + with self.source_session_maker() as session: + for table in pycram.orm.base.Base.metadata.sorted_tables: + table_content_set = set() + table_content_set.update(session.query(table).all()) + source_content[table] = table_content_set + + for key in destination_content: + self.assertEqual(destination_content[key], destination_content[key].union(source_content[key])) From 69855bca6678aee63a626250ffefc7fba8b428b2 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 12 Dec 2023 14:24:13 +0100 Subject: [PATCH 30/34] Adds an jupyter notebook example for migrating neems --- doc/source/examples.rst | 4 +- doc/source/notebooks/migrate_neems.ipynb | 1 + examples/migrate_neems.ipynb | 174 +++++++++++++++++++++++ 3 files changed, 176 insertions(+), 3 deletions(-) create mode 120000 doc/source/notebooks/migrate_neems.ipynb create mode 100644 examples/migrate_neems.ipynb diff --git a/doc/source/examples.rst b/doc/source/examples.rst index 27fa384ce..985578c36 100644 --- a/doc/source/examples.rst +++ b/doc/source/examples.rst @@ -62,6 +62,4 @@ Example .. nbgallery:: notebooks/orm_example - - - + notebooks/migrate_neems diff --git a/doc/source/notebooks/migrate_neems.ipynb b/doc/source/notebooks/migrate_neems.ipynb new file mode 120000 index 000000000..031ee0a9e --- /dev/null +++ b/doc/source/notebooks/migrate_neems.ipynb @@ -0,0 +1 @@ +../../../examples/migrate_neems.ipynb \ No newline at end of file diff --git a/examples/migrate_neems.ipynb b/examples/migrate_neems.ipynb new file mode 100644 index 000000000..b632e063e --- /dev/null +++ b/examples/migrate_neems.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Migrate NEEMs\n", + "\n", + "In this tutorial we will go through the process of migrating locally stored PyCRORM NEEMs to an already existing \n", + "PyCRORM NEEM-Hub.\n", + "\n", + "In some cases it my occur that you want to record data from a pycram controlled robot locally and perform some local \n", + "actions before migrating your data to a big database server. In such cases, you can easily make a local database and\n", + "connect your pycram process to it. \n", + "\n", + "After you recorded your data locally you can migrate the data using the `migrate_neems` function.\n", + "\n", + "First, lets create an in memory database engine called `source_engine` where we record our current process." + ], + "metadata": { + "collapsed": false + }, + "id": "cd56f4149fdcbad3" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12a7af50-308e-4579-b774-41e7512d673a", + "metadata": { + "collapsed": false, + "is_executing": true + }, + "outputs": [], + "source": [ + "import sqlalchemy.orm\n", + "\n", + "source_engine: sqlalchemy.engine.Engine\n", + "source_engine = sqlalchemy.create_engine(\"sqlite+pysqlite:///:memory:\", echo=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19ffb917198a0ed9", + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "i=0\n", + "print(i)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "Next, create an engine called `destination_engine` for the destination database where you want to migrate your NEEMs to." + ], + "metadata": { + "collapsed": false + }, + "id": "1151feb13af413ba" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4698d10a573e8316", + "metadata": { + "collapsed": false, + "is_executing": true + }, + "outputs": [], + "source": [ + "destination_engine: sqlalchemy.engine.Engine\n", + "destination_engine = sqlalchemy.create_engine(\"postgresql+psycopg2://alice:alice123@localhost:5433/pycram\", echo=False) # example values\n", + "destination_session_maker = sqlalchemy.orm.sessionmaker(bind=destination_engine)" + ] + }, + { + "cell_type": "markdown", + "id": "3321fdf7ba6e8d57", + "metadata": { + "collapsed": false + }, + "source": [ + "If you already have some data in your local database you can skip the next block, otherwise we will quickly create \n", + "some example data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff1eb1b5b405ca09", + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import pycram.orm.utils \n", + "import pycram.task\n", + " \n", + "with source_session_maker() as session:\n", + " example_plans = pycram.orm.utils.ExamplePlans()\n", + " for i in range(3):\n", + " try:\n", + " print(\"ExamplePlans run {}\".format(i))\n", + " example_plans.pick_and_place_plan()\n", + " example_plans.world.reset_bullet_world()\n", + " process_meta_data = pycram.orm.base.ProcessMetaData()\n", + " process_meta_data.description = \"Database merger Unittest: Example pick and place {}\".format(i)\n", + " process_meta_data.insert(session)\n", + " pycram.task.task_tree.root.insert(session)\n", + " process_meta_data.reset()\n", + " except Exception as e:\n", + " print(\"Error: {}\\n{}\".format(type(e).__name__, e))\n", + " session.commit()\n", + " example_plans.world.exit()" + ] + }, + { + "cell_type": "markdown", + "id": "8aa3d955693814b1", + "metadata": { + "collapsed": false + }, + "source": [ + "Now that we have some example data or already had some example data all we need to do it migrate it over to\n", + "the already existing PyCRORM NEEM-Hub." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e60334b0eccf4c4", + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pycram.orm.utils.migrate_neems(source_session_maker,destination_session_maker)" + ] + }, + { + "cell_type": "markdown", + "id": "3d7d04dc0c68de19", + "metadata": { + "collapsed": false + }, + "source": [ + "If the command ran successful the content of the source database should now be copied within the destination database. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 12 Dec 2023 16:06:17 +0100 Subject: [PATCH 31/34] Updates the documentation example --- examples/migrate_neems.ipynb | 75 ++++++++++++++---------------------- 1 file changed, 29 insertions(+), 46 deletions(-) diff --git a/examples/migrate_neems.ipynb b/examples/migrate_neems.ipynb index b632e063e..aea07c7d7 100644 --- a/examples/migrate_neems.ipynb +++ b/examples/migrate_neems.ipynb @@ -2,6 +2,8 @@ "cells": [ { "cell_type": "markdown", + "id": "cd56f4149fdcbad3", + "metadata": {}, "source": [ "# Migrate NEEMs\n", "\n", @@ -15,18 +17,13 @@ "After you recorded your data locally you can migrate the data using the `migrate_neems` function.\n", "\n", "First, lets create an in memory database engine called `source_engine` where we record our current process." - ], - "metadata": { - "collapsed": false - }, - "id": "cd56f4149fdcbad3" + ] }, { "cell_type": "code", "execution_count": null, "id": "12a7af50-308e-4579-b774-41e7512d673a", "metadata": { - "collapsed": false, "is_executing": true }, "outputs": [], @@ -37,35 +34,20 @@ "source_engine = sqlalchemy.create_engine(\"sqlite+pysqlite:///:memory:\", echo=False)" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "19ffb917198a0ed9", - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "i=0\n", - "print(i)" - ] - }, { "cell_type": "markdown", + "id": "1151feb13af413ba", + "metadata": {}, "source": [ - "Next, create an engine called `destination_engine` for the destination database where you want to migrate your NEEMs to." - ], - "metadata": { - "collapsed": false - }, - "id": "1151feb13af413ba" + "Next, create an engine called `destination_engine` for the destination database where you want to migrate your NEEMs to.\n", + "`Note:` This is just an example configuration." + ] }, { "cell_type": "code", "execution_count": null, "id": "4698d10a573e8316", "metadata": { - "collapsed": false, "is_executing": true }, "outputs": [], @@ -78,9 +60,7 @@ { "cell_type": "markdown", "id": "3321fdf7ba6e8d57", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "If you already have some data in your local database you can skip the next block, otherwise we will quickly create \n", "some example data" @@ -90,9 +70,7 @@ "cell_type": "code", "execution_count": null, "id": "ff1eb1b5b405ca09", - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import pycram.orm.utils \n", @@ -106,7 +84,7 @@ " example_plans.pick_and_place_plan()\n", " example_plans.world.reset_bullet_world()\n", " process_meta_data = pycram.orm.base.ProcessMetaData()\n", - " process_meta_data.description = \"Database merger Unittest: Example pick and place {}\".format(i)\n", + " process_meta_data.description = \"Example Plan used to have mockup data {}\".format(i)\n", " process_meta_data.insert(session)\n", " pycram.task.task_tree.root.insert(session)\n", " process_meta_data.reset()\n", @@ -119,9 +97,7 @@ { "cell_type": "markdown", "id": "8aa3d955693814b1", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Now that we have some example data or already had some example data all we need to do it migrate it over to\n", "the already existing PyCRORM NEEM-Hub." @@ -131,9 +107,7 @@ "cell_type": "code", "execution_count": null, "id": "8e60334b0eccf4c4", - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "pycram.orm.utils.migrate_neems(source_session_maker,destination_session_maker)" @@ -142,11 +116,20 @@ { "cell_type": "markdown", "id": "3d7d04dc0c68de19", - "metadata": { - "collapsed": false - }, + "metadata": {}, + "source": [ + "If the command ran successful the content of the source database should now be copied within the destination database. For example if we query for all the different meta_data, the previously defined instance come up." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e0e50ba7", + "metadata": {}, + "outputs": [], "source": [ - "If the command ran successful the content of the source database should now be copied within the destination database. " + "with destination_session_maker() as session:\n", + " session.query(pycram.orm.base.Base.ProcessMetaData).all()" ] } ], @@ -159,14 +142,14 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.7.11" } }, "nbformat": 4, From 70ac00b129016de1446893f4aa25d54f80356801 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 18 Dec 2023 11:01:25 +0100 Subject: [PATCH 32/34] Adds example answers to the code cells --- examples/migrate_neems.ipynb | 1016 +++++++++++++++++++++++++++++++++- 1 file changed, 1003 insertions(+), 13 deletions(-) diff --git a/examples/migrate_neems.ipynb b/examples/migrate_neems.ipynb index aea07c7d7..6ac1f76ab 100644 --- a/examples/migrate_neems.ipynb +++ b/examples/migrate_neems.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "12a7af50-308e-4579-b774-41e7512d673a", "metadata": { "is_executing": true @@ -29,9 +29,12 @@ "outputs": [], "source": [ "import sqlalchemy.orm\n", + "import pycram\n", "\n", "source_engine: sqlalchemy.engine.Engine\n", - "source_engine = sqlalchemy.create_engine(\"sqlite+pysqlite:///:memory:\", echo=False)" + "source_engine = sqlalchemy.create_engine(\"sqlite+pysqlite:///:memory:\", echo=False)\n", + "source_session_maker = sqlalchemy.orm.sessionmaker(bind=source_engine)\n", + "pycram.orm.base.Base.metadata.create_all(source_engine) #create all Tables" ] }, { @@ -45,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "4698d10a573e8316", "metadata": { "is_executing": true @@ -68,23 +71,139 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "ff1eb1b5b405ca09", + "execution_count": 5, + "id": "fb4df6cb-c7f8-4cd8-8db8-bc8668dfeade", "metadata": {}, "outputs": [], + "source": [ + "from pycram.enums import Arms, ObjectType\n", + "from pycram.designators.action_designator import *\n", + "from pycram.designators.location_designator import *\n", + "from pycram.process_module import simulated_robot\n", + "from pycram.task import with_tree\n", + "from pycram.bullet_world import Object\n", + "from pycram.designators.object_designator import *\n", + "\n", + "\n", + "class ExamplePlans:\n", + " def __init__(self):\n", + " self.world = BulletWorld(\"DIRECT\")\n", + " self.pr2 = Object(\"pr2\", ObjectType.ROBOT, \"pr2.urdf\")\n", + " self.kitchen = Object(\"kitchen\", ObjectType.ENVIRONMENT, \"kitchen.urdf\")\n", + " self.milk = Object(\"milk\", ObjectType.MILK, \"milk.stl\", pose=Pose([1.3, 1, 0.9]))\n", + " self.cereal = Object(\"cereal\", ObjectType.BREAKFAST_CEREAL, \"breakfast_cereal.stl\", pose=Pose([1.3, 0.7, 0.95]))\n", + " self.milk_desig = ObjectDesignatorDescription(names=[\"milk\"])\n", + " self.cereal_desig = ObjectDesignatorDescription(names=[\"cereal\"])\n", + " self.robot_desig = ObjectDesignatorDescription(names=[\"pr2\"]).resolve()\n", + " self.kitchen_desig = ObjectDesignatorDescription(names=[\"kitchen\"])\n", + "\n", + " @with_tree\n", + " def pick_and_place_plan(self):\n", + " with simulated_robot:\n", + " ParkArmsAction.Action(Arms.BOTH).perform()\n", + " MoveTorsoAction([0.3]).resolve().perform()\n", + " pickup_pose = CostmapLocation(target=self.cereal_desig.resolve(), reachable_for=self.robot_desig).resolve()\n", + " pickup_arm = pickup_pose.reachable_arms[0]\n", + " NavigateAction(target_locations=[pickup_pose.pose]).resolve().perform()\n", + " PickUpAction(object_designator_description=self.cereal_desig, arms=[pickup_arm],\n", + " grasps=[\"front\"]).resolve().perform()\n", + " ParkArmsAction([Arms.BOTH]).resolve().perform()\n", + "\n", + " place_island = SemanticCostmapLocation(\"kitchen_island_surface\", self.kitchen_desig.resolve(),\n", + " self.cereal_desig.resolve()).resolve()\n", + "\n", + " place_stand = CostmapLocation(place_island.pose, reachable_for=self.robot_desig,\n", + " reachable_arm=pickup_arm).resolve()\n", + "\n", + " NavigateAction(target_locations=[place_stand.pose]).resolve().perform()\n", + "\n", + " PlaceAction(self.cereal_desig, target_locations=[place_island.pose], arms=[pickup_arm]).resolve().perform()\n", + "\n", + " ParkArmsAction.Action(Arms.BOTH).perform()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ff1eb1b5b405ca09", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Unknown tag \"material\" in /robot[@name='plane']/link[@name='planeLink']/collision[1]\n", + "Unknown tag \"contact\" in /robot[@name='plane']/link[@name='planeLink']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='base_laser_link']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='wide_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='narrow_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='laser_tilt_link']\n", + "Unknown tag \"material\" in /robot[@name='plane']/link[@name='planeLink']/collision[1]\n", + "Unknown tag \"contact\" in /robot[@name='plane']/link[@name='planeLink']\n", + "Scalar element defined multiple times: limit\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='base_laser_link']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='wide_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='narrow_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='laser_tilt_link']\n", + "Scalar element defined multiple times: limit\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExamplePlans run 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:00<00:00, 120.02it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExamplePlans run 1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 39/39 [00:00<00:00, 135.86it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ExamplePlans run 2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 58/58 [00:00<00:00, 131.35it/s]\n" + ] + } + ], "source": [ "import pycram.orm.utils \n", "import pycram.task\n", " \n", "with source_session_maker() as session:\n", - " example_plans = pycram.orm.utils.ExamplePlans()\n", + " example_plans = ExamplePlans()\n", " for i in range(3):\n", " try:\n", " print(\"ExamplePlans run {}\".format(i))\n", " example_plans.pick_and_place_plan()\n", " example_plans.world.reset_bullet_world()\n", " process_meta_data = pycram.orm.base.ProcessMetaData()\n", - " process_meta_data.description = \"Example Plan used to have mockup data {}\".format(i)\n", + " process_meta_data.description = \"Example Plan {}\".format(i)\n", " process_meta_data.insert(session)\n", " pycram.task.task_tree.root.insert(session)\n", " process_meta_data.reset()\n", @@ -105,10 +224,819 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "8e60334b0eccf4c4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[INFO] [1702892602.683740]: ~~~~~~~~~~~~~~~~~~~~~~~~~ProcessMetaData~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.686164]: ~~~~~~~~~~~~~~~~~~~~~~~~~Color~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.687885]: ~~~~~~~~~~~~~~~~~~~~~~~~~Designator~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.689191]: ~~~~~~~~~~~~~~~~~~~~~~~~~Position~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.690526]: ~~~~~~~~~~~~~~~~~~~~~~~~~Quaternion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.692102]: ~~~~~~~~~~~~~~~~~~~~~~~~~Code~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.693552]: ~~~~~~~~~~~~~~~~~~~~~~~~~Motion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.694997]: ~~~~~~~~~~~~~~~~~~~~~~~~~Pose~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.696404]: ~~~~~~~~~~~~~~~~~~~~~~~~~ClosingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.697850]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.699282]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.700672]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveGripperMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.701990]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.703283]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTCPMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.704558]: ~~~~~~~~~~~~~~~~~~~~~~~~~Object~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.705856]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpeningMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.707145]: ~~~~~~~~~~~~~~~~~~~~~~~~~RobotState~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.708465]: ~~~~~~~~~~~~~~~~~~~~~~~~~TaskTreeNode~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.709725]: ~~~~~~~~~~~~~~~~~~~~~~~~~WorldStateDetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.711246]: ~~~~~~~~~~~~~~~~~~~~~~~~~AccessingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.712568]: ~~~~~~~~~~~~~~~~~~~~~~~~~Action~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.713830]: ~~~~~~~~~~~~~~~~~~~~~~~~~BelieveObject~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.715147]: ~~~~~~~~~~~~~~~~~~~~~~~~~ObjectPart~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.716466]: ~~~~~~~~~~~~~~~~~~~~~~~~~CloseAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.717774]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.719101]: ~~~~~~~~~~~~~~~~~~~~~~~~~GraspingAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.720397]: ~~~~~~~~~~~~~~~~~~~~~~~~~GripAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.721657]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookAtAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.722912]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTorsoAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.724208]: ~~~~~~~~~~~~~~~~~~~~~~~~~NavigateAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.725641]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpenAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.727206]: ~~~~~~~~~~~~~~~~~~~~~~~~~ParkArmsAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.728858]: ~~~~~~~~~~~~~~~~~~~~~~~~~PickUpAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.730467]: ~~~~~~~~~~~~~~~~~~~~~~~~~PlaceAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.732024]: ~~~~~~~~~~~~~~~~~~~~~~~~~Release~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.733402]: ~~~~~~~~~~~~~~~~~~~~~~~~~SetGripperAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.734699]: ~~~~~~~~~~~~~~~~~~~~~~~~~TransportAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702892602.738342]: Found primary_key collision in table ProcessMetaData value: 1 max value in memory 50\n", + "[INFO] [1702892602.745591]: Found primary_key collision in table ProcessMetaData value: 2 max value in memory 51\n", + "[INFO] [1702892602.751883]: Found primary_key collision in table ProcessMetaData value: 3 max value in memory 52\n", + "[INFO] [1702892602.772005]: Found primary_key collision in table Designator value: 33 max value in memory 1783\n", + "[INFO] [1702892602.776647]: Found primary_key collision in table Designator value: 34 max value in memory 1784\n", + "[INFO] [1702892602.779541]: Found primary_key collision in table Designator value: 35 max value in memory 1785\n", + "[INFO] [1702892602.782130]: Found primary_key collision in table Designator value: 36 max value in memory 1786\n", + "[INFO] [1702892602.785748]: Found primary_key collision in table Designator value: 37 max value in memory 1787\n", + "[INFO] [1702892602.787743]: Found primary_key collision in table Designator value: 38 max value in memory 1788\n", + "[INFO] [1702892602.789623]: Found primary_key collision in table Designator value: 39 max value in memory 1789\n", + "[INFO] [1702892602.791414]: Found primary_key collision in table Designator value: 40 max value in memory 1790\n", + "[INFO] [1702892602.793109]: Found primary_key collision in table Designator value: 41 max value in memory 1791\n", + "[INFO] [1702892602.794920]: Found primary_key collision in table Designator value: 42 max value in memory 1792\n", + "[INFO] [1702892602.796640]: Found primary_key collision in table Designator value: 43 max value in memory 1793\n", + "[INFO] [1702892602.798382]: Found primary_key collision in table Designator value: 44 max value in memory 1794\n", + "[INFO] [1702892602.799860]: Found primary_key collision in table Designator value: 45 max value in memory 1795\n", + "[INFO] [1702892602.801351]: Found primary_key collision in table Designator value: 46 max value in memory 1796\n", + "[INFO] [1702892602.802846]: Found primary_key collision in table Designator value: 47 max value in memory 1797\n", + "[INFO] [1702892602.804669]: Found primary_key collision in table Designator value: 48 max value in memory 1798\n", + "[INFO] [1702892602.806335]: Found primary_key collision in table Designator value: 49 max value in memory 1799\n", + "[INFO] [1702892602.807880]: Found primary_key collision in table Designator value: 50 max value in memory 1800\n", + "[INFO] [1702892602.809461]: Found primary_key collision in table Designator value: 51 max value in memory 1801\n", + "[INFO] [1702892602.810998]: Found primary_key collision in table Designator value: 52 max value in memory 1802\n", + "[INFO] [1702892602.812455]: Found primary_key collision in table Designator value: 53 max value in memory 1803\n", + "[INFO] [1702892602.813959]: Found primary_key collision in table Designator value: 54 max value in memory 1804\n", + "[INFO] [1702892602.815541]: Found primary_key collision in table Designator value: 55 max value in memory 1805\n", + "[INFO] [1702892602.817287]: Found primary_key collision in table Designator value: 56 max value in memory 1806\n", + "[INFO] [1702892602.818839]: Found primary_key collision in table Designator value: 57 max value in memory 1807\n", + "[INFO] [1702892602.820345]: Found primary_key collision in table Designator value: 58 max value in memory 1808\n", + "[INFO] [1702892602.822335]: Found primary_key collision in table Designator value: 59 max value in memory 1809\n", + "[INFO] [1702892602.823854]: Found primary_key collision in table Designator value: 60 max value in memory 1810\n", + "[INFO] [1702892602.825314]: Found primary_key collision in table Designator value: 61 max value in memory 1811\n", + "[INFO] [1702892602.826761]: Found primary_key collision in table Designator value: 62 max value in memory 1812\n", + "[INFO] [1702892602.828172]: Found primary_key collision in table Designator value: 63 max value in memory 1813\n", + "[INFO] [1702892602.829616]: Found primary_key collision in table Designator value: 64 max value in memory 1814\n", + "[INFO] [1702892602.831035]: Found primary_key collision in table Designator value: 65 max value in memory 1815\n", + "[INFO] [1702892602.832533]: Found primary_key collision in table Designator value: 66 max value in memory 1816\n", + "[INFO] [1702892602.834493]: Found primary_key collision in table Designator value: 67 max value in memory 1817\n", + "[INFO] [1702892602.835905]: Found primary_key collision in table Designator value: 68 max value in memory 1818\n", + "[INFO] [1702892602.837429]: Found primary_key collision in table Designator value: 69 max value in memory 1819\n", + "[INFO] [1702892602.838867]: Found primary_key collision in table Designator value: 70 max value in memory 1820\n", + "[INFO] [1702892602.840287]: Found primary_key collision in table Designator value: 71 max value in memory 1821\n", + "[INFO] [1702892602.841685]: Found primary_key collision in table Designator value: 72 max value in memory 1822\n", + "[INFO] [1702892602.843127]: Found primary_key collision in table Designator value: 73 max value in memory 1823\n", + "[INFO] [1702892602.844594]: Found primary_key collision in table Designator value: 74 max value in memory 1824\n", + "[INFO] [1702892602.846061]: Found primary_key collision in table Designator value: 75 max value in memory 1825\n", + "[INFO] [1702892602.847513]: Found primary_key collision in table Designator value: 76 max value in memory 1826\n", + "[INFO] [1702892602.850707]: Found primary_key collision in table Designator value: 1 max value in memory 1827\n", + "[INFO] [1702892602.852139]: Found primary_key collision in table Designator value: 2 max value in memory 1828\n", + "[INFO] [1702892602.853622]: Found primary_key collision in table Designator value: 3 max value in memory 1829\n", + "[INFO] [1702892602.855110]: Found primary_key collision in table Designator value: 4 max value in memory 1830\n", + "[INFO] [1702892602.856547]: Found primary_key collision in table Designator value: 5 max value in memory 1831\n", + "[INFO] [1702892602.858030]: Found primary_key collision in table Designator value: 6 max value in memory 1832\n", + "[INFO] [1702892602.859488]: Found primary_key collision in table Designator value: 7 max value in memory 1833\n", + "[INFO] [1702892602.860874]: Found primary_key collision in table Designator value: 8 max value in memory 1834\n", + "[INFO] [1702892602.862757]: Found primary_key collision in table Designator value: 9 max value in memory 1835\n", + "[INFO] [1702892602.864513]: Found primary_key collision in table Designator value: 10 max value in memory 1836\n", + "[INFO] [1702892602.866479]: Found primary_key collision in table Designator value: 11 max value in memory 1837\n", + "[INFO] [1702892602.868268]: Found primary_key collision in table Designator value: 12 max value in memory 1838\n", + "[INFO] [1702892602.870108]: Found primary_key collision in table Designator value: 13 max value in memory 1839\n", + "[INFO] [1702892602.871823]: Found primary_key collision in table Designator value: 14 max value in memory 1840\n", + "[INFO] [1702892602.873328]: Found primary_key collision in table Designator value: 15 max value in memory 1841\n", + "[INFO] [1702892602.874770]: Found primary_key collision in table Designator value: 16 max value in memory 1842\n", + "[INFO] [1702892602.876346]: Found primary_key collision in table Designator value: 17 max value in memory 1843\n", + "[INFO] [1702892602.877837]: Found primary_key collision in table Designator value: 18 max value in memory 1844\n", + "[INFO] [1702892602.879385]: Found primary_key collision in table Designator value: 19 max value in memory 1845\n", + "[INFO] [1702892602.880850]: Found primary_key collision in table Designator value: 20 max value in memory 1846\n", + "[INFO] [1702892602.882346]: Found primary_key collision in table Designator value: 21 max value in memory 1847\n", + "[INFO] [1702892602.883798]: Found primary_key collision in table Designator value: 22 max value in memory 1848\n", + "[INFO] [1702892602.885363]: Found primary_key collision in table Designator value: 23 max value in memory 1849\n", + "[INFO] [1702892602.887106]: Found primary_key collision in table Designator value: 24 max value in memory 1850\n", + "[INFO] [1702892602.888511]: Found primary_key collision in table Designator value: 25 max value in memory 1851\n", + "[INFO] [1702892602.889905]: Found primary_key collision in table Designator value: 26 max value in memory 1852\n", + "[INFO] [1702892602.891312]: Found primary_key collision in table Designator value: 27 max value in memory 1853\n", + "[INFO] [1702892602.892689]: Found primary_key collision in table Designator value: 28 max value in memory 1854\n", + "[INFO] [1702892602.894114]: Found primary_key collision in table Designator value: 29 max value in memory 1855\n", + "[INFO] [1702892602.895591]: Found primary_key collision in table Designator value: 30 max value in memory 1856\n", + "[INFO] [1702892602.897142]: Found primary_key collision in table Designator value: 31 max value in memory 1857\n", + "[INFO] [1702892602.898669]: Found primary_key collision in table Designator value: 32 max value in memory 1858\n", + "[INFO] [1702892602.900318]: Found primary_key collision in table Designator value: 77 max value in memory 1859\n", + "[INFO] [1702892602.901830]: Found primary_key collision in table Designator value: 78 max value in memory 1860\n", + "[INFO] [1702892602.903264]: Found primary_key collision in table Designator value: 79 max value in memory 1861\n", + "[INFO] [1702892602.904744]: Found primary_key collision in table Designator value: 80 max value in memory 1862\n", + "[INFO] [1702892602.906155]: Found primary_key collision in table Designator value: 81 max value in memory 1863\n", + "[INFO] [1702892602.907552]: Found primary_key collision in table Designator value: 82 max value in memory 1864\n", + "[INFO] [1702892602.908941]: Found primary_key collision in table Designator value: 83 max value in memory 1865\n", + "[INFO] [1702892602.910434]: Found primary_key collision in table Designator value: 84 max value in memory 1866\n", + "[INFO] [1702892602.911899]: Found primary_key collision in table Designator value: 85 max value in memory 1867\n", + "[INFO] [1702892602.913298]: Found primary_key collision in table Designator value: 86 max value in memory 1868\n", + "[INFO] [1702892602.914992]: Found primary_key collision in table Designator value: 87 max value in memory 1869\n", + "[INFO] [1702892602.916401]: Found primary_key collision in table Designator value: 88 max value in memory 1870\n", + "[INFO] [1702892602.917870]: Found primary_key collision in table Designator value: 89 max value in memory 1871\n", + "[INFO] [1702892602.919381]: Found primary_key collision in table Designator value: 90 max value in memory 1872\n", + "[INFO] [1702892602.921065]: Found primary_key collision in table Designator value: 91 max value in memory 1873\n", + "[INFO] [1702892602.922636]: Found primary_key collision in table Designator value: 92 max value in memory 1874\n", + "[INFO] [1702892602.924238]: Found primary_key collision in table Designator value: 93 max value in memory 1875\n", + "[INFO] [1702892602.925762]: Found primary_key collision in table Designator value: 94 max value in memory 1876\n", + "[INFO] [1702892602.927520]: Found primary_key collision in table Designator value: 95 max value in memory 1877\n", + "[INFO] [1702892602.929447]: Found primary_key collision in table Designator value: 96 max value in memory 1878\n", + "[INFO] [1702892602.931161]: Found primary_key collision in table Designator value: 97 max value in memory 1879\n", + "[INFO] [1702892602.932722]: Found primary_key collision in table Designator value: 98 max value in memory 1880\n", + "[INFO] [1702892602.934133]: Found primary_key collision in table Designator value: 99 max value in memory 1881\n", + "[INFO] [1702892602.935528]: Found primary_key collision in table Designator value: 100 max value in memory 1882\n", + "[INFO] [1702892602.936979]: Found primary_key collision in table Designator value: 101 max value in memory 1883\n", + "[INFO] [1702892602.938474]: Found primary_key collision in table Designator value: 102 max value in memory 1884\n", + "[INFO] [1702892602.940143]: Found primary_key collision in table Designator value: 103 max value in memory 1885\n", + "[INFO] [1702892602.941797]: Found primary_key collision in table Designator value: 104 max value in memory 1886\n", + "[INFO] [1702892602.943671]: Found primary_key collision in table Designator value: 105 max value in memory 1887\n", + "[INFO] [1702892602.945402]: Found primary_key collision in table Designator value: 106 max value in memory 1888\n", + "[INFO] [1702892602.946870]: Found primary_key collision in table Designator value: 107 max value in memory 1889\n", + "[INFO] [1702892602.948325]: Found primary_key collision in table Designator value: 108 max value in memory 1890\n", + "[INFO] [1702892602.968989]: Found primary_key collision in table Position value: 1 max value in memory 1981\n", + "[INFO] [1702892602.971376]: Found primary_key collision in table Position value: 2 max value in memory 1982\n", + "[INFO] [1702892602.972558]: Found primary_key collision in table Position value: 3 max value in memory 1983\n", + "[INFO] [1702892602.973688]: Found primary_key collision in table Position value: 4 max value in memory 1984\n", + "[INFO] [1702892602.974842]: Found primary_key collision in table Position value: 5 max value in memory 1985\n", + "[INFO] [1702892602.976032]: Found primary_key collision in table Position value: 6 max value in memory 1986\n", + "[INFO] [1702892602.977266]: Found primary_key collision in table Position value: 7 max value in memory 1987\n", + "[INFO] [1702892602.978436]: Found primary_key collision in table Position value: 8 max value in memory 1988\n", + "[INFO] [1702892602.979561]: Found primary_key collision in table Position value: 9 max value in memory 1989\n", + "[INFO] [1702892602.980758]: Found primary_key collision in table Position value: 10 max value in memory 1990\n", + "[INFO] [1702892602.981946]: Found primary_key collision in table Position value: 11 max value in memory 1991\n", + "[INFO] [1702892602.983154]: Found primary_key collision in table Position value: 12 max value in memory 1992\n", + "[INFO] [1702892602.984346]: Found primary_key collision in table Position value: 13 max value in memory 1993\n", + "[INFO] [1702892602.985530]: Found primary_key collision in table Position value: 14 max value in memory 1994\n", + "[INFO] [1702892602.986732]: Found primary_key collision in table Position value: 15 max value in memory 1995\n", + "[INFO] [1702892602.987936]: Found primary_key collision in table Position value: 16 max value in memory 1996\n", + "[INFO] [1702892602.989107]: Found primary_key collision in table Position value: 17 max value in memory 1997\n", + "[INFO] [1702892602.990309]: Found primary_key collision in table Position value: 18 max value in memory 1998\n", + "[INFO] [1702892602.991485]: Found primary_key collision in table Position value: 19 max value in memory 1999\n", + "[INFO] [1702892602.992661]: Found primary_key collision in table Position value: 20 max value in memory 2000\n", + "[INFO] [1702892602.993834]: Found primary_key collision in table Position value: 21 max value in memory 2001\n", + "[INFO] [1702892602.995061]: Found primary_key collision in table Position value: 22 max value in memory 2002\n", + "[INFO] [1702892602.996263]: Found primary_key collision in table Position value: 23 max value in memory 2003\n", + "[INFO] [1702892602.997467]: Found primary_key collision in table Position value: 24 max value in memory 2004\n", + "[INFO] [1702892602.998695]: Found primary_key collision in table Position value: 25 max value in memory 2005\n", + "[INFO] [1702892602.999890]: Found primary_key collision in table Position value: 26 max value in memory 2006\n", + "[INFO] [1702892603.001071]: Found primary_key collision in table Position value: 27 max value in memory 2007\n", + "[INFO] [1702892603.002261]: Found primary_key collision in table Position value: 28 max value in memory 2008\n", + "[INFO] [1702892603.003448]: Found primary_key collision in table Position value: 29 max value in memory 2009\n", + "[INFO] [1702892603.004639]: Found primary_key collision in table Position value: 30 max value in memory 2010\n", + "[INFO] [1702892603.006012]: Found primary_key collision in table Position value: 31 max value in memory 2011\n", + "[INFO] [1702892603.007222]: Found primary_key collision in table Position value: 32 max value in memory 2012\n", + "[INFO] [1702892603.008438]: Found primary_key collision in table Position value: 33 max value in memory 2013\n", + "[INFO] [1702892603.009650]: Found primary_key collision in table Position value: 34 max value in memory 2014\n", + "[INFO] [1702892603.010865]: Found primary_key collision in table Position value: 35 max value in memory 2015\n", + "[INFO] [1702892603.012053]: Found primary_key collision in table Position value: 36 max value in memory 2016\n", + "[INFO] [1702892603.013246]: Found primary_key collision in table Position value: 37 max value in memory 2017\n", + "[INFO] [1702892603.014440]: Found primary_key collision in table Position value: 38 max value in memory 2018\n", + "[INFO] [1702892603.015620]: Found primary_key collision in table Position value: 39 max value in memory 2019\n", + "[INFO] [1702892603.016814]: Found primary_key collision in table Position value: 40 max value in memory 2020\n", + "[INFO] [1702892603.018041]: Found primary_key collision in table Position value: 41 max value in memory 2021\n", + "[INFO] [1702892603.019246]: Found primary_key collision in table Position value: 42 max value in memory 2022\n", + "[INFO] [1702892603.020435]: Found primary_key collision in table Position value: 43 max value in memory 2023\n", + "[INFO] [1702892603.021609]: Found primary_key collision in table Position value: 44 max value in memory 2024\n", + "[INFO] [1702892603.022796]: Found primary_key collision in table Position value: 45 max value in memory 2025\n", + "[INFO] [1702892603.023991]: Found primary_key collision in table Position value: 46 max value in memory 2026\n", + "[INFO] [1702892603.025164]: Found primary_key collision in table Position value: 47 max value in memory 2027\n", + "[INFO] [1702892603.026356]: Found primary_key collision in table Position value: 48 max value in memory 2028\n", + "[INFO] [1702892603.027558]: Found primary_key collision in table Position value: 49 max value in memory 2029\n", + "[INFO] [1702892603.028739]: Found primary_key collision in table Position value: 50 max value in memory 2030\n", + "[INFO] [1702892603.029932]: Found primary_key collision in table Position value: 51 max value in memory 2031\n", + "[INFO] [1702892603.031156]: Found primary_key collision in table Position value: 52 max value in memory 2032\n", + "[INFO] [1702892603.032349]: Found primary_key collision in table Position value: 53 max value in memory 2033\n", + "[INFO] [1702892603.033664]: Found primary_key collision in table Position value: 54 max value in memory 2034\n", + "[INFO] [1702892603.034906]: Found primary_key collision in table Position value: 55 max value in memory 2035\n", + "[INFO] [1702892603.036128]: Found primary_key collision in table Position value: 56 max value in memory 2036\n", + "[INFO] [1702892603.037378]: Found primary_key collision in table Position value: 57 max value in memory 2037\n", + "[INFO] [1702892603.038642]: Found primary_key collision in table Position value: 58 max value in memory 2038\n", + "[INFO] [1702892603.039867]: Found primary_key collision in table Position value: 59 max value in memory 2039\n", + "[INFO] [1702892603.041082]: Found primary_key collision in table Position value: 60 max value in memory 2040\n", + "[INFO] [1702892603.042312]: Found primary_key collision in table Position value: 61 max value in memory 2041\n", + "[INFO] [1702892603.043523]: Found primary_key collision in table Position value: 62 max value in memory 2042\n", + "[INFO] [1702892603.044912]: Found primary_key collision in table Position value: 63 max value in memory 2043\n", + "[INFO] [1702892603.046140]: Found primary_key collision in table Position value: 64 max value in memory 2044\n", + "[INFO] [1702892603.047355]: Found primary_key collision in table Position value: 65 max value in memory 2045\n", + "[INFO] [1702892603.048564]: Found primary_key collision in table Position value: 66 max value in memory 2046\n", + "[INFO] [1702892603.049772]: Found primary_key collision in table Position value: 67 max value in memory 2047\n", + "[INFO] [1702892603.051012]: Found primary_key collision in table Position value: 68 max value in memory 2048\n", + "[INFO] [1702892603.052238]: Found primary_key collision in table Position value: 69 max value in memory 2049\n", + "[INFO] [1702892603.053459]: Found primary_key collision in table Position value: 70 max value in memory 2050\n", + "[INFO] [1702892603.054697]: Found primary_key collision in table Position value: 71 max value in memory 2051\n", + "[INFO] [1702892603.055918]: Found primary_key collision in table Position value: 72 max value in memory 2052\n", + "[INFO] [1702892603.057129]: Found primary_key collision in table Position value: 73 max value in memory 2053\n", + "[INFO] [1702892603.058409]: Found primary_key collision in table Position value: 74 max value in memory 2054\n", + "[INFO] [1702892603.059661]: Found primary_key collision in table Position value: 75 max value in memory 2055\n", + "[INFO] [1702892603.060892]: Found primary_key collision in table Position value: 76 max value in memory 2056\n", + "[INFO] [1702892603.062152]: Found primary_key collision in table Position value: 77 max value in memory 2057\n", + "[INFO] [1702892603.063383]: Found primary_key collision in table Position value: 78 max value in memory 2058\n", + "[INFO] [1702892603.064609]: Found primary_key collision in table Position value: 79 max value in memory 2059\n", + "[INFO] [1702892603.065830]: Found primary_key collision in table Position value: 80 max value in memory 2060\n", + "[INFO] [1702892603.067071]: Found primary_key collision in table Position value: 81 max value in memory 2061\n", + "[INFO] [1702892603.068273]: Found primary_key collision in table Position value: 82 max value in memory 2062\n", + "[INFO] [1702892603.069502]: Found primary_key collision in table Position value: 83 max value in memory 2063\n", + "[INFO] [1702892603.070774]: Found primary_key collision in table Position value: 84 max value in memory 2064\n", + "[INFO] [1702892603.072017]: Found primary_key collision in table Position value: 85 max value in memory 2065\n", + "[INFO] [1702892603.073240]: Found primary_key collision in table Position value: 86 max value in memory 2066\n", + "[INFO] [1702892603.074454]: Found primary_key collision in table Position value: 87 max value in memory 2067\n", + "[INFO] [1702892603.075652]: Found primary_key collision in table Position value: 88 max value in memory 2068\n", + "[INFO] [1702892603.076847]: Found primary_key collision in table Position value: 89 max value in memory 2069\n", + "[INFO] [1702892603.078099]: Found primary_key collision in table Position value: 90 max value in memory 2070\n", + "[INFO] [1702892603.079364]: Found primary_key collision in table Position value: 91 max value in memory 2071\n", + "[INFO] [1702892603.080606]: Found primary_key collision in table Position value: 92 max value in memory 2072\n", + "[INFO] [1702892603.081819]: Found primary_key collision in table Position value: 93 max value in memory 2073\n", + "[INFO] [1702892603.083038]: Found primary_key collision in table Position value: 94 max value in memory 2074\n", + "[INFO] [1702892603.084247]: Found primary_key collision in table Position value: 95 max value in memory 2075\n", + "[INFO] [1702892603.085624]: Found primary_key collision in table Position value: 96 max value in memory 2076\n", + "[INFO] [1702892603.087357]: Found primary_key collision in table Position value: 97 max value in memory 2077\n", + "[INFO] [1702892603.088695]: Found primary_key collision in table Position value: 98 max value in memory 2078\n", + "[INFO] [1702892603.089992]: Found primary_key collision in table Position value: 99 max value in memory 2079\n", + "[INFO] [1702892603.091232]: Found primary_key collision in table Position value: 100 max value in memory 2080\n", + "[INFO] [1702892603.092432]: Found primary_key collision in table Position value: 101 max value in memory 2081\n", + "[INFO] [1702892603.093640]: Found primary_key collision in table Position value: 102 max value in memory 2082\n", + "[INFO] [1702892603.094877]: Found primary_key collision in table Position value: 103 max value in memory 2083\n", + "[INFO] [1702892603.096129]: Found primary_key collision in table Position value: 104 max value in memory 2084\n", + "[INFO] [1702892603.097354]: Found primary_key collision in table Position value: 105 max value in memory 2085\n", + "[INFO] [1702892603.098636]: Found primary_key collision in table Position value: 106 max value in memory 2086\n", + "[INFO] [1702892603.099860]: Found primary_key collision in table Position value: 107 max value in memory 2087\n", + "[INFO] [1702892603.101085]: Found primary_key collision in table Position value: 108 max value in memory 2088\n", + "[INFO] [1702892603.102339]: Found primary_key collision in table Position value: 109 max value in memory 2089\n", + "[INFO] [1702892603.103665]: Found primary_key collision in table Position value: 110 max value in memory 2090\n", + "[INFO] [1702892603.104935]: Found primary_key collision in table Position value: 111 max value in memory 2091\n", + "[INFO] [1702892603.106207]: Found primary_key collision in table Position value: 112 max value in memory 2092\n", + "[INFO] [1702892603.107448]: Found primary_key collision in table Position value: 113 max value in memory 2093\n", + "[INFO] [1702892603.108678]: Found primary_key collision in table Position value: 114 max value in memory 2094\n", + "[INFO] [1702892603.109928]: Found primary_key collision in table Position value: 115 max value in memory 2095\n", + "[INFO] [1702892603.111188]: Found primary_key collision in table Position value: 116 max value in memory 2096\n", + "[INFO] [1702892603.112414]: Found primary_key collision in table Position value: 117 max value in memory 2097\n", + "[INFO] [1702892603.113676]: Found primary_key collision in table Position value: 118 max value in memory 2098\n", + "[INFO] [1702892603.115004]: Found primary_key collision in table Position value: 119 max value in memory 2099\n", + "[INFO] [1702892603.116269]: Found primary_key collision in table Position value: 120 max value in memory 2100\n", + "[INFO] [1702892603.133946]: Found primary_key collision in table Quaternion value: 71 max value in memory 1981\n", + "[INFO] [1702892603.135834]: Found primary_key collision in table Quaternion value: 72 max value in memory 1982\n", + "[INFO] [1702892603.137220]: Found primary_key collision in table Quaternion value: 73 max value in memory 1983\n", + "[INFO] [1702892603.138563]: Found primary_key collision in table Quaternion value: 74 max value in memory 1984\n", + "[INFO] [1702892603.139760]: Found primary_key collision in table Quaternion value: 75 max value in memory 1985\n", + "[INFO] [1702892603.141169]: Found primary_key collision in table Quaternion value: 76 max value in memory 1986\n", + "[INFO] [1702892603.142707]: Found primary_key collision in table Quaternion value: 77 max value in memory 1987\n", + "[INFO] [1702892603.143820]: Found primary_key collision in table Quaternion value: 78 max value in memory 1988\n", + "[INFO] [1702892603.144967]: Found primary_key collision in table Quaternion value: 79 max value in memory 1989\n", + "[INFO] [1702892603.146174]: Found primary_key collision in table Quaternion value: 80 max value in memory 1990\n", + "[INFO] [1702892603.147619]: Found primary_key collision in table Quaternion value: 81 max value in memory 1991\n", + "[INFO] [1702892603.149292]: Found primary_key collision in table Quaternion value: 82 max value in memory 1992\n", + "[INFO] [1702892603.150975]: Found primary_key collision in table Quaternion value: 83 max value in memory 1993\n", + "[INFO] [1702892603.152314]: Found primary_key collision in table Quaternion value: 84 max value in memory 1994\n", + "[INFO] [1702892603.153600]: Found primary_key collision in table Quaternion value: 85 max value in memory 1995\n", + "[INFO] [1702892603.154898]: Found primary_key collision in table Quaternion value: 86 max value in memory 1996\n", + "[INFO] [1702892603.156165]: Found primary_key collision in table Quaternion value: 87 max value in memory 1997\n", + "[INFO] [1702892603.157447]: Found primary_key collision in table Quaternion value: 88 max value in memory 1998\n", + "[INFO] [1702892603.158764]: Found primary_key collision in table Quaternion value: 89 max value in memory 1999\n", + "[INFO] [1702892603.160074]: Found primary_key collision in table Quaternion value: 90 max value in memory 2000\n", + "[INFO] [1702892603.161382]: Found primary_key collision in table Quaternion value: 91 max value in memory 2001\n", + "[INFO] [1702892603.162685]: Found primary_key collision in table Quaternion value: 92 max value in memory 2002\n", + "[INFO] [1702892603.163980]: Found primary_key collision in table Quaternion value: 93 max value in memory 2003\n", + "[INFO] [1702892603.165253]: Found primary_key collision in table Quaternion value: 94 max value in memory 2004\n", + "[INFO] [1702892603.166560]: Found primary_key collision in table Quaternion value: 95 max value in memory 2005\n", + "[INFO] [1702892603.167828]: Found primary_key collision in table Quaternion value: 96 max value in memory 2006\n", + "[INFO] [1702892603.169108]: Found primary_key collision in table Quaternion value: 97 max value in memory 2007\n", + "[INFO] [1702892603.170506]: Found primary_key collision in table Quaternion value: 98 max value in memory 2008\n", + "[INFO] [1702892603.171806]: Found primary_key collision in table Quaternion value: 99 max value in memory 2009\n", + "[INFO] [1702892603.173097]: Found primary_key collision in table Quaternion value: 100 max value in memory 2010\n", + "[INFO] [1702892603.174576]: Found primary_key collision in table Quaternion value: 101 max value in memory 2011\n", + "[INFO] [1702892603.175843]: Found primary_key collision in table Quaternion value: 102 max value in memory 2012\n", + "[INFO] [1702892603.177136]: Found primary_key collision in table Quaternion value: 103 max value in memory 2013\n", + "[INFO] [1702892603.178705]: Found primary_key collision in table Quaternion value: 104 max value in memory 2014\n", + "[INFO] [1702892603.180213]: Found primary_key collision in table Quaternion value: 105 max value in memory 2015\n", + "[INFO] [1702892603.181674]: Found primary_key collision in table Quaternion value: 106 max value in memory 2016\n", + "[INFO] [1702892603.183128]: Found primary_key collision in table Quaternion value: 107 max value in memory 2017\n", + "[INFO] [1702892603.184573]: Found primary_key collision in table Quaternion value: 108 max value in memory 2018\n", + "[INFO] [1702892603.186020]: Found primary_key collision in table Quaternion value: 109 max value in memory 2019\n", + "[INFO] [1702892603.187475]: Found primary_key collision in table Quaternion value: 110 max value in memory 2020\n", + "[INFO] [1702892603.188951]: Found primary_key collision in table Quaternion value: 111 max value in memory 2021\n", + "[INFO] [1702892603.190296]: Found primary_key collision in table Quaternion value: 112 max value in memory 2022\n", + "[INFO] [1702892603.191602]: Found primary_key collision in table Quaternion value: 113 max value in memory 2023\n", + "[INFO] [1702892603.192894]: Found primary_key collision in table Quaternion value: 114 max value in memory 2024\n", + "[INFO] [1702892603.194216]: Found primary_key collision in table Quaternion value: 115 max value in memory 2025\n", + "[INFO] [1702892603.195529]: Found primary_key collision in table Quaternion value: 116 max value in memory 2026\n", + "[INFO] [1702892603.196820]: Found primary_key collision in table Quaternion value: 117 max value in memory 2027\n", + "[INFO] [1702892603.198148]: Found primary_key collision in table Quaternion value: 118 max value in memory 2028\n", + "[INFO] [1702892603.199485]: Found primary_key collision in table Quaternion value: 119 max value in memory 2029\n", + "[INFO] [1702892603.200816]: Found primary_key collision in table Quaternion value: 120 max value in memory 2030\n", + "[INFO] [1702892603.202152]: Found primary_key collision in table Quaternion value: 1 max value in memory 2031\n", + "[INFO] [1702892603.203781]: Found primary_key collision in table Quaternion value: 2 max value in memory 2032\n", + "[INFO] [1702892603.205339]: Found primary_key collision in table Quaternion value: 3 max value in memory 2033\n", + "[INFO] [1702892603.206814]: Found primary_key collision in table Quaternion value: 4 max value in memory 2034\n", + "[INFO] [1702892603.208412]: Found primary_key collision in table Quaternion value: 5 max value in memory 2035\n", + "[INFO] [1702892603.209978]: Found primary_key collision in table Quaternion value: 6 max value in memory 2036\n", + "[INFO] [1702892603.211422]: Found primary_key collision in table Quaternion value: 7 max value in memory 2037\n", + "[INFO] [1702892603.212681]: Found primary_key collision in table Quaternion value: 8 max value in memory 2038\n", + "[INFO] [1702892603.213949]: Found primary_key collision in table Quaternion value: 9 max value in memory 2039\n", + "[INFO] [1702892603.215207]: Found primary_key collision in table Quaternion value: 10 max value in memory 2040\n", + "[INFO] [1702892603.216486]: Found primary_key collision in table Quaternion value: 11 max value in memory 2041\n", + "[INFO] [1702892603.217768]: Found primary_key collision in table Quaternion value: 12 max value in memory 2042\n", + "[INFO] [1702892603.219254]: Found primary_key collision in table Quaternion value: 13 max value in memory 2043\n", + "[INFO] [1702892603.220511]: Found primary_key collision in table Quaternion value: 14 max value in memory 2044\n", + "[INFO] [1702892603.221764]: Found primary_key collision in table Quaternion value: 15 max value in memory 2045\n", + "[INFO] [1702892603.223042]: Found primary_key collision in table Quaternion value: 16 max value in memory 2046\n", + "[INFO] [1702892603.224300]: Found primary_key collision in table Quaternion value: 17 max value in memory 2047\n", + "[INFO] [1702892603.225558]: Found primary_key collision in table Quaternion value: 18 max value in memory 2048\n", + "[INFO] [1702892603.226838]: Found primary_key collision in table Quaternion value: 19 max value in memory 2049\n", + "[INFO] [1702892603.228220]: Found primary_key collision in table Quaternion value: 20 max value in memory 2050\n", + "[INFO] [1702892603.229491]: Found primary_key collision in table Quaternion value: 21 max value in memory 2051\n", + "[INFO] [1702892603.230775]: Found primary_key collision in table Quaternion value: 22 max value in memory 2052\n", + "[INFO] [1702892603.232075]: Found primary_key collision in table Quaternion value: 23 max value in memory 2053\n", + "[INFO] [1702892603.233355]: Found primary_key collision in table Quaternion value: 24 max value in memory 2054\n", + "[INFO] [1702892603.234649]: Found primary_key collision in table Quaternion value: 25 max value in memory 2055\n", + "[INFO] [1702892603.235938]: Found primary_key collision in table Quaternion value: 26 max value in memory 2056\n", + "[INFO] [1702892603.237303]: Found primary_key collision in table Quaternion value: 27 max value in memory 2057\n", + "[INFO] [1702892603.238831]: Found primary_key collision in table Quaternion value: 28 max value in memory 2058\n", + "[INFO] [1702892603.240481]: Found primary_key collision in table Quaternion value: 29 max value in memory 2059\n", + "[INFO] [1702892603.242058]: Found primary_key collision in table Quaternion value: 30 max value in memory 2060\n", + "[INFO] [1702892603.243625]: Found primary_key collision in table Quaternion value: 31 max value in memory 2061\n", + "[INFO] [1702892603.245184]: Found primary_key collision in table Quaternion value: 32 max value in memory 2062\n", + "[INFO] [1702892603.246766]: Found primary_key collision in table Quaternion value: 33 max value in memory 2063\n", + "[INFO] [1702892603.248189]: Found primary_key collision in table Quaternion value: 34 max value in memory 2064\n", + "[INFO] [1702892603.249468]: Found primary_key collision in table Quaternion value: 35 max value in memory 2065\n", + "[INFO] [1702892603.250755]: Found primary_key collision in table Quaternion value: 36 max value in memory 2066\n", + "[INFO] [1702892603.252023]: Found primary_key collision in table Quaternion value: 37 max value in memory 2067\n", + "[INFO] [1702892603.253334]: Found primary_key collision in table Quaternion value: 38 max value in memory 2068\n", + "[INFO] [1702892603.254720]: Found primary_key collision in table Quaternion value: 39 max value in memory 2069\n", + "[INFO] [1702892603.256061]: Found primary_key collision in table Quaternion value: 40 max value in memory 2070\n", + "[INFO] [1702892603.257325]: Found primary_key collision in table Quaternion value: 41 max value in memory 2071\n", + "[INFO] [1702892603.259198]: Found primary_key collision in table Quaternion value: 42 max value in memory 2072\n", + "[INFO] [1702892603.260834]: Found primary_key collision in table Quaternion value: 43 max value in memory 2073\n", + "[INFO] [1702892603.262432]: Found primary_key collision in table Quaternion value: 44 max value in memory 2074\n", + "[INFO] [1702892603.264184]: Found primary_key collision in table Quaternion value: 45 max value in memory 2075\n", + "[INFO] [1702892603.265850]: Found primary_key collision in table Quaternion value: 46 max value in memory 2076\n", + "[INFO] [1702892603.267315]: Found primary_key collision in table Quaternion value: 47 max value in memory 2077\n", + "[INFO] [1702892603.268764]: Found primary_key collision in table Quaternion value: 48 max value in memory 2078\n", + "[INFO] [1702892603.270478]: Found primary_key collision in table Quaternion value: 49 max value in memory 2079\n", + "[INFO] [1702892603.272224]: Found primary_key collision in table Quaternion value: 50 max value in memory 2080\n", + "[INFO] [1702892603.273879]: Found primary_key collision in table Quaternion value: 51 max value in memory 2081\n", + "[INFO] [1702892603.275595]: Found primary_key collision in table Quaternion value: 52 max value in memory 2082\n", + "[INFO] [1702892603.277122]: Found primary_key collision in table Quaternion value: 53 max value in memory 2083\n", + "[INFO] [1702892603.278702]: Found primary_key collision in table Quaternion value: 54 max value in memory 2084\n", + "[INFO] [1702892603.279891]: Found primary_key collision in table Quaternion value: 55 max value in memory 2085\n", + "[INFO] [1702892603.280981]: Found primary_key collision in table Quaternion value: 56 max value in memory 2086\n", + "[INFO] [1702892603.282229]: Found primary_key collision in table Quaternion value: 57 max value in memory 2087\n", + "[INFO] [1702892603.283215]: Found primary_key collision in table Quaternion value: 58 max value in memory 2088\n", + "[INFO] [1702892603.284144]: Found primary_key collision in table Quaternion value: 59 max value in memory 2089\n", + "[INFO] [1702892603.285058]: Found primary_key collision in table Quaternion value: 60 max value in memory 2090\n", + "[INFO] [1702892603.285961]: Found primary_key collision in table Quaternion value: 61 max value in memory 2091\n", + "[INFO] [1702892603.286888]: Found primary_key collision in table Quaternion value: 62 max value in memory 2092\n", + "[INFO] [1702892603.288143]: Found primary_key collision in table Quaternion value: 63 max value in memory 2093\n", + "[INFO] [1702892603.289739]: Found primary_key collision in table Quaternion value: 64 max value in memory 2094\n", + "[INFO] [1702892603.291179]: Found primary_key collision in table Quaternion value: 65 max value in memory 2095\n", + "[INFO] [1702892603.292538]: Found primary_key collision in table Quaternion value: 66 max value in memory 2096\n", + "[INFO] [1702892603.293938]: Found primary_key collision in table Quaternion value: 67 max value in memory 2097\n", + "[INFO] [1702892603.295309]: Found primary_key collision in table Quaternion value: 68 max value in memory 2098\n", + "[INFO] [1702892603.296661]: Found primary_key collision in table Quaternion value: 69 max value in memory 2099\n", + "[INFO] [1702892603.298049]: Found primary_key collision in table Quaternion value: 70 max value in memory 2100\n", + "[INFO] [1702892603.309661]: Found primary_key collision in table Code value: 1 max value in memory 1931\n", + "[INFO] [1702892603.311598]: Found primary_key collision in table Code value: 2 max value in memory 1932\n", + "[INFO] [1702892603.312976]: Found primary_key collision in table Code value: 21 max value in memory 1933\n", + "[INFO] [1702892603.313962]: Found primary_key collision in table Code value: 22 max value in memory 1934\n", + "[INFO] [1702892603.315264]: Found primary_key collision in table Code value: 41 max value in memory 1935\n", + "[INFO] [1702892603.317141]: Found primary_key collision in table Code value: 60 max value in memory 1936\n", + "[INFO] [1702892603.318267]: Found primary_key collision in table Code value: 61 max value in memory 1937\n", + "[INFO] [1702892603.319729]: Found primary_key collision in table Code value: 80 max value in memory 1938\n", + "[INFO] [1702892603.320802]: Found primary_key collision in table Code value: 37 max value in memory 1939\n", + "[INFO] [1702892603.322284]: Found primary_key collision in table Code value: 38 max value in memory 1940\n", + "[INFO] [1702892603.323800]: Found primary_key collision in table Code value: 39 max value in memory 1941\n", + "[INFO] [1702892603.325209]: Found primary_key collision in table Code value: 40 max value in memory 1942\n", + "[INFO] [1702892603.326547]: Found primary_key collision in table Code value: 42 max value in memory 1943\n", + "[INFO] [1702892603.327876]: Found primary_key collision in table Code value: 43 max value in memory 1944\n", + "[INFO] [1702892603.329239]: Found primary_key collision in table Code value: 44 max value in memory 1945\n", + "[INFO] [1702892603.330616]: Found primary_key collision in table Code value: 45 max value in memory 1946\n", + "[INFO] [1702892603.331951]: Found primary_key collision in table Code value: 46 max value in memory 1947\n", + "[INFO] [1702892603.333293]: Found primary_key collision in table Code value: 47 max value in memory 1948\n", + "[INFO] [1702892603.334583]: Found primary_key collision in table Code value: 48 max value in memory 1949\n", + "[INFO] [1702892603.335855]: Found primary_key collision in table Code value: 49 max value in memory 1950\n", + "[INFO] [1702892603.337099]: Found primary_key collision in table Code value: 50 max value in memory 1951\n", + "[INFO] [1702892603.338431]: Found primary_key collision in table Code value: 51 max value in memory 1952\n", + "[INFO] [1702892603.339805]: Found primary_key collision in table Code value: 52 max value in memory 1953\n", + "[INFO] [1702892603.341031]: Found primary_key collision in table Code value: 53 max value in memory 1954\n", + "[INFO] [1702892603.342239]: Found primary_key collision in table Code value: 54 max value in memory 1955\n", + "[INFO] [1702892603.343444]: Found primary_key collision in table Code value: 55 max value in memory 1956\n", + "[INFO] [1702892603.344672]: Found primary_key collision in table Code value: 56 max value in memory 1957\n", + "[INFO] [1702892603.345869]: Found primary_key collision in table Code value: 57 max value in memory 1958\n", + "[INFO] [1702892603.347080]: Found primary_key collision in table Code value: 58 max value in memory 1959\n", + "[INFO] [1702892603.348641]: Found primary_key collision in table Code value: 59 max value in memory 1960\n", + "[INFO] [1702892603.349972]: Found primary_key collision in table Code value: 62 max value in memory 1961\n", + "[INFO] [1702892603.351282]: Found primary_key collision in table Code value: 63 max value in memory 1962\n", + "[INFO] [1702892603.352551]: Found primary_key collision in table Code value: 64 max value in memory 1963\n", + "[INFO] [1702892603.353813]: Found primary_key collision in table Code value: 65 max value in memory 1964\n", + "[INFO] [1702892603.355128]: Found primary_key collision in table Code value: 66 max value in memory 1965\n", + "[INFO] [1702892603.356396]: Found primary_key collision in table Code value: 67 max value in memory 1966\n", + "[INFO] [1702892603.357593]: Found primary_key collision in table Code value: 68 max value in memory 1967\n", + "[INFO] [1702892603.358832]: Found primary_key collision in table Code value: 69 max value in memory 1968\n", + "[INFO] [1702892603.360040]: Found primary_key collision in table Code value: 70 max value in memory 1969\n", + "[INFO] [1702892603.361229]: Found primary_key collision in table Code value: 71 max value in memory 1970\n", + "[INFO] [1702892603.362471]: Found primary_key collision in table Code value: 72 max value in memory 1971\n", + "[INFO] [1702892603.363670]: Found primary_key collision in table Code value: 73 max value in memory 1972\n", + "[INFO] [1702892603.364843]: Found primary_key collision in table Code value: 74 max value in memory 1973\n", + "[INFO] [1702892603.366090]: Found primary_key collision in table Code value: 75 max value in memory 1974\n", + "[INFO] [1702892603.367358]: Found primary_key collision in table Code value: 76 max value in memory 1975\n", + "[INFO] [1702892603.368599]: Found primary_key collision in table Code value: 77 max value in memory 1976\n", + "[INFO] [1702892603.369907]: Found primary_key collision in table Code value: 78 max value in memory 1977\n", + "[INFO] [1702892603.371215]: Found primary_key collision in table Code value: 79 max value in memory 1978\n", + "[INFO] [1702892603.372450]: Found primary_key collision in table Code value: 3 max value in memory 1979\n", + "[INFO] [1702892603.373694]: Found primary_key collision in table Code value: 4 max value in memory 1980\n", + "[INFO] [1702892603.375033]: Found primary_key collision in table Code value: 5 max value in memory 1981\n", + "[INFO] [1702892603.376266]: Found primary_key collision in table Code value: 6 max value in memory 1982\n", + "[INFO] [1702892603.377444]: Found primary_key collision in table Code value: 7 max value in memory 1983\n", + "[INFO] [1702892603.378664]: Found primary_key collision in table Code value: 8 max value in memory 1984\n", + "[INFO] [1702892603.379902]: Found primary_key collision in table Code value: 9 max value in memory 1985\n", + "[INFO] [1702892603.381109]: Found primary_key collision in table Code value: 10 max value in memory 1986\n", + "[INFO] [1702892603.382324]: Found primary_key collision in table Code value: 11 max value in memory 1987\n", + "[INFO] [1702892603.383605]: Found primary_key collision in table Code value: 12 max value in memory 1988\n", + "[INFO] [1702892603.384784]: Found primary_key collision in table Code value: 13 max value in memory 1989\n", + "[INFO] [1702892603.385957]: Found primary_key collision in table Code value: 14 max value in memory 1990\n", + "[INFO] [1702892603.387163]: Found primary_key collision in table Code value: 15 max value in memory 1991\n", + "[INFO] [1702892603.388354]: Found primary_key collision in table Code value: 16 max value in memory 1992\n", + "[INFO] [1702892603.389693]: Found primary_key collision in table Code value: 17 max value in memory 1993\n", + "[INFO] [1702892603.390876]: Found primary_key collision in table Code value: 18 max value in memory 1994\n", + "[INFO] [1702892603.392334]: Found primary_key collision in table Code value: 19 max value in memory 1995\n", + "[INFO] [1702892603.393522]: Found primary_key collision in table Code value: 20 max value in memory 1996\n", + "[INFO] [1702892603.394705]: Found primary_key collision in table Code value: 23 max value in memory 1997\n", + "[INFO] [1702892603.395918]: Found primary_key collision in table Code value: 24 max value in memory 1998\n", + "[INFO] [1702892603.397112]: Found primary_key collision in table Code value: 25 max value in memory 1999\n", + "[INFO] [1702892603.398351]: Found primary_key collision in table Code value: 26 max value in memory 2000\n", + "[INFO] [1702892603.399600]: Found primary_key collision in table Code value: 27 max value in memory 2001\n", + "[INFO] [1702892603.400798]: Found primary_key collision in table Code value: 28 max value in memory 2002\n", + "[INFO] [1702892603.401964]: Found primary_key collision in table Code value: 29 max value in memory 2003\n", + "[INFO] [1702892603.403154]: Found primary_key collision in table Code value: 30 max value in memory 2004\n", + "[INFO] [1702892603.404330]: Found primary_key collision in table Code value: 31 max value in memory 2005\n", + "[INFO] [1702892603.405542]: Found primary_key collision in table Code value: 32 max value in memory 2006\n", + "[INFO] [1702892603.406737]: Found primary_key collision in table Code value: 33 max value in memory 2007\n", + "[INFO] [1702892603.407924]: Found primary_key collision in table Code value: 34 max value in memory 2008\n", + "[INFO] [1702892603.409169]: Found primary_key collision in table Code value: 35 max value in memory 2009\n", + "[INFO] [1702892603.410439]: Found primary_key collision in table Code value: 36 max value in memory 2010\n", + "[INFO] [1702892603.412517]: Found primary_key collision in table Code value: 99 max value in memory 2011\n", + "[INFO] [1702892603.413825]: Found primary_key collision in table Code value: 81 max value in memory 2012\n", + "[INFO] [1702892603.415109]: Found primary_key collision in table Code value: 82 max value in memory 2013\n", + "[INFO] [1702892603.416408]: Found primary_key collision in table Code value: 83 max value in memory 2014\n", + "[INFO] [1702892603.417622]: Found primary_key collision in table Code value: 84 max value in memory 2015\n", + "[INFO] [1702892603.418818]: Found primary_key collision in table Code value: 85 max value in memory 2016\n", + "[INFO] [1702892603.420139]: Found primary_key collision in table Code value: 86 max value in memory 2017\n", + "[INFO] [1702892603.421361]: Found primary_key collision in table Code value: 87 max value in memory 2018\n", + "[INFO] [1702892603.422564]: Found primary_key collision in table Code value: 88 max value in memory 2019\n", + "[INFO] [1702892603.423787]: Found primary_key collision in table Code value: 89 max value in memory 2020\n", + "[INFO] [1702892603.424972]: Found primary_key collision in table Code value: 90 max value in memory 2021\n", + "[INFO] [1702892603.426152]: Found primary_key collision in table Code value: 91 max value in memory 2022\n", + "[INFO] [1702892603.427328]: Found primary_key collision in table Code value: 92 max value in memory 2023\n", + "[INFO] [1702892603.428525]: Found primary_key collision in table Code value: 93 max value in memory 2024\n", + "[INFO] [1702892603.429749]: Found primary_key collision in table Code value: 94 max value in memory 2025\n", + "[INFO] [1702892603.431200]: Found primary_key collision in table Code value: 95 max value in memory 2026\n", + "[INFO] [1702892603.432610]: Found primary_key collision in table Code value: 96 max value in memory 2027\n", + "[INFO] [1702892603.433926]: Found primary_key collision in table Code value: 97 max value in memory 2028\n", + "[INFO] [1702892603.435200]: Found primary_key collision in table Code value: 98 max value in memory 2029\n", + "[INFO] [1702892603.436443]: Found primary_key collision in table Code value: 100 max value in memory 2030\n", + "[INFO] [1702892603.437752]: Found primary_key collision in table Code value: 101 max value in memory 2031\n", + "[INFO] [1702892603.439026]: Found primary_key collision in table Code value: 102 max value in memory 2032\n", + "[INFO] [1702892603.440278]: Found primary_key collision in table Code value: 103 max value in memory 2033\n", + "[INFO] [1702892603.441522]: Found primary_key collision in table Code value: 104 max value in memory 2034\n", + "[INFO] [1702892603.442776]: Found primary_key collision in table Code value: 105 max value in memory 2035\n", + "[INFO] [1702892603.444038]: Found primary_key collision in table Code value: 106 max value in memory 2036\n", + "[INFO] [1702892603.445333]: Found primary_key collision in table Code value: 107 max value in memory 2037\n", + "[INFO] [1702892603.446539]: Found primary_key collision in table Code value: 108 max value in memory 2038\n", + "[INFO] [1702892603.447726]: Found primary_key collision in table Code value: 109 max value in memory 2039\n", + "[INFO] [1702892603.448895]: Found primary_key collision in table Code value: 110 max value in memory 2040\n", + "[INFO] [1702892603.450078]: Found primary_key collision in table Code value: 111 max value in memory 2041\n", + "[INFO] [1702892603.451283]: Found primary_key collision in table Code value: 112 max value in memory 2042\n", + "[INFO] [1702892603.452470]: Found primary_key collision in table Code value: 113 max value in memory 2043\n", + "[INFO] [1702892603.453651]: Found primary_key collision in table Code value: 114 max value in memory 2044\n", + "[INFO] [1702892603.454867]: Found primary_key collision in table Code value: 115 max value in memory 2045\n", + "[INFO] [1702892603.456420]: Found primary_key collision in table Code value: 116 max value in memory 2046\n", + "[INFO] [1702892603.457916]: Found primary_key collision in table Code value: 117 max value in memory 2047\n", + "[INFO] [1702892603.475480]: Found primary_key collision in table Pose value: 109 max value in memory 1981\n", + "[INFO] [1702892603.477912]: Found primary_key collision in table Pose value: 110 max value in memory 1982\n", + "[INFO] [1702892603.479603]: Found primary_key collision in table Pose value: 111 max value in memory 1983\n", + "[INFO] [1702892603.481136]: Found primary_key collision in table Pose value: 112 max value in memory 1984\n", + "[INFO] [1702892603.482693]: Found primary_key collision in table Pose value: 113 max value in memory 1985\n", + "[INFO] [1702892603.484202]: Found primary_key collision in table Pose value: 114 max value in memory 1986\n", + "[INFO] [1702892603.485745]: Found primary_key collision in table Pose value: 115 max value in memory 1987\n", + "[INFO] [1702892603.487167]: Found primary_key collision in table Pose value: 116 max value in memory 1988\n", + "[INFO] [1702892603.488503]: Found primary_key collision in table Pose value: 117 max value in memory 1989\n", + "[INFO] [1702892603.490370]: Found primary_key collision in table Pose value: 118 max value in memory 1990\n", + "[INFO] [1702892603.491845]: Found primary_key collision in table Pose value: 119 max value in memory 1991\n", + "[INFO] [1702892603.493932]: Found primary_key collision in table Pose value: 120 max value in memory 1992\n", + "[INFO] [1702892603.499389]: Found primary_key collision in table Pose value: 1 max value in memory 1993\n", + "[INFO] [1702892603.500919]: Found primary_key collision in table Pose value: 2 max value in memory 1994\n", + "[INFO] [1702892603.502436]: Found primary_key collision in table Pose value: 3 max value in memory 1995\n", + "[INFO] [1702892603.503915]: Found primary_key collision in table Pose value: 4 max value in memory 1996\n", + "[INFO] [1702892603.505398]: Found primary_key collision in table Pose value: 5 max value in memory 1997\n", + "[INFO] [1702892603.506806]: Found primary_key collision in table Pose value: 6 max value in memory 1998\n", + "[INFO] [1702892603.508188]: Found primary_key collision in table Pose value: 7 max value in memory 1999\n", + "[INFO] [1702892603.509438]: Found primary_key collision in table Pose value: 8 max value in memory 2000\n", + "[INFO] [1702892603.510750]: Found primary_key collision in table Pose value: 9 max value in memory 2001\n", + "[INFO] [1702892603.512105]: Found primary_key collision in table Pose value: 10 max value in memory 2002\n", + "[INFO] [1702892603.513412]: Found primary_key collision in table Pose value: 11 max value in memory 2003\n", + "[INFO] [1702892603.514727]: Found primary_key collision in table Pose value: 12 max value in memory 2004\n", + "[INFO] [1702892603.515981]: Found primary_key collision in table Pose value: 13 max value in memory 2005\n", + "[INFO] [1702892603.517293]: Found primary_key collision in table Pose value: 14 max value in memory 2006\n", + "[INFO] [1702892603.518669]: Found primary_key collision in table Pose value: 15 max value in memory 2007\n", + "[INFO] [1702892603.520370]: Found primary_key collision in table Pose value: 16 max value in memory 2008\n", + "[INFO] [1702892603.521628]: Found primary_key collision in table Pose value: 17 max value in memory 2009\n", + "[INFO] [1702892603.522920]: Found primary_key collision in table Pose value: 18 max value in memory 2010\n", + "[INFO] [1702892603.524197]: Found primary_key collision in table Pose value: 19 max value in memory 2011\n", + "[INFO] [1702892603.525452]: Found primary_key collision in table Pose value: 20 max value in memory 2012\n", + "[INFO] [1702892603.526690]: Found primary_key collision in table Pose value: 21 max value in memory 2013\n", + "[INFO] [1702892603.527918]: Found primary_key collision in table Pose value: 22 max value in memory 2014\n", + "[INFO] [1702892603.529256]: Found primary_key collision in table Pose value: 23 max value in memory 2015\n", + "[INFO] [1702892603.530697]: Found primary_key collision in table Pose value: 24 max value in memory 2016\n", + "[INFO] [1702892603.532076]: Found primary_key collision in table Pose value: 25 max value in memory 2017\n", + "[INFO] [1702892603.533423]: Found primary_key collision in table Pose value: 26 max value in memory 2018\n", + "[INFO] [1702892603.534779]: Found primary_key collision in table Pose value: 27 max value in memory 2019\n", + "[INFO] [1702892603.536173]: Found primary_key collision in table Pose value: 28 max value in memory 2020\n", + "[INFO] [1702892603.537695]: Found primary_key collision in table Pose value: 29 max value in memory 2021\n", + "[INFO] [1702892603.539126]: Found primary_key collision in table Pose value: 30 max value in memory 2022\n", + "[INFO] [1702892603.540704]: Found primary_key collision in table Pose value: 31 max value in memory 2023\n", + "[INFO] [1702892603.542169]: Found primary_key collision in table Pose value: 32 max value in memory 2024\n", + "[INFO] [1702892603.543556]: Found primary_key collision in table Pose value: 33 max value in memory 2025\n", + "[INFO] [1702892603.545020]: Found primary_key collision in table Pose value: 34 max value in memory 2026\n", + "[INFO] [1702892603.546513]: Found primary_key collision in table Pose value: 35 max value in memory 2027\n", + "[INFO] [1702892603.547881]: Found primary_key collision in table Pose value: 36 max value in memory 2028\n", + "[INFO] [1702892603.549175]: Found primary_key collision in table Pose value: 37 max value in memory 2029\n", + "[INFO] [1702892603.550440]: Found primary_key collision in table Pose value: 38 max value in memory 2030\n", + "[INFO] [1702892603.551688]: Found primary_key collision in table Pose value: 39 max value in memory 2031\n", + "[INFO] [1702892603.552921]: Found primary_key collision in table Pose value: 40 max value in memory 2032\n", + "[INFO] [1702892603.554222]: Found primary_key collision in table Pose value: 41 max value in memory 2033\n", + "[INFO] [1702892603.555545]: Found primary_key collision in table Pose value: 42 max value in memory 2034\n", + "[INFO] [1702892603.556918]: Found primary_key collision in table Pose value: 43 max value in memory 2035\n", + "[INFO] [1702892603.558205]: Found primary_key collision in table Pose value: 44 max value in memory 2036\n", + "[INFO] [1702892603.559500]: Found primary_key collision in table Pose value: 45 max value in memory 2037\n", + "[INFO] [1702892603.560757]: Found primary_key collision in table Pose value: 46 max value in memory 2038\n", + "[INFO] [1702892603.562197]: Found primary_key collision in table Pose value: 71 max value in memory 2039\n", + "[INFO] [1702892603.563840]: Found primary_key collision in table Pose value: 72 max value in memory 2040\n", + "[INFO] [1702892603.565129]: Found primary_key collision in table Pose value: 73 max value in memory 2041\n", + "[INFO] [1702892603.566401]: Found primary_key collision in table Pose value: 74 max value in memory 2042\n", + "[INFO] [1702892603.567669]: Found primary_key collision in table Pose value: 75 max value in memory 2043\n", + "[INFO] [1702892603.569050]: Found primary_key collision in table Pose value: 76 max value in memory 2044\n", + "[INFO] [1702892603.570465]: Found primary_key collision in table Pose value: 77 max value in memory 2045\n", + "[INFO] [1702892603.571843]: Found primary_key collision in table Pose value: 78 max value in memory 2046\n", + "[INFO] [1702892603.573124]: Found primary_key collision in table Pose value: 79 max value in memory 2047\n", + "[INFO] [1702892603.574386]: Found primary_key collision in table Pose value: 80 max value in memory 2048\n", + "[INFO] [1702892603.575701]: Found primary_key collision in table Pose value: 81 max value in memory 2049\n", + "[INFO] [1702892603.576933]: Found primary_key collision in table Pose value: 82 max value in memory 2050\n", + "[INFO] [1702892603.578191]: Found primary_key collision in table Pose value: 83 max value in memory 2051\n", + "[INFO] [1702892603.579560]: Found primary_key collision in table Pose value: 84 max value in memory 2052\n", + "[INFO] [1702892603.580971]: Found primary_key collision in table Pose value: 85 max value in memory 2053\n", + "[INFO] [1702892603.582377]: Found primary_key collision in table Pose value: 86 max value in memory 2054\n", + "[INFO] [1702892603.584114]: Found primary_key collision in table Pose value: 87 max value in memory 2055\n", + "[INFO] [1702892603.585796]: Found primary_key collision in table Pose value: 88 max value in memory 2056\n", + "[INFO] [1702892603.587560]: Found primary_key collision in table Pose value: 89 max value in memory 2057\n", + "[INFO] [1702892603.589199]: Found primary_key collision in table Pose value: 90 max value in memory 2058\n", + "[INFO] [1702892603.590800]: Found primary_key collision in table Pose value: 91 max value in memory 2059\n", + "[INFO] [1702892603.592076]: Found primary_key collision in table Pose value: 92 max value in memory 2060\n", + "[INFO] [1702892603.593352]: Found primary_key collision in table Pose value: 93 max value in memory 2061\n", + "[INFO] [1702892603.594641]: Found primary_key collision in table Pose value: 94 max value in memory 2062\n", + "[INFO] [1702892603.596095]: Found primary_key collision in table Pose value: 95 max value in memory 2063\n", + "[INFO] [1702892603.597448]: Found primary_key collision in table Pose value: 96 max value in memory 2064\n", + "[INFO] [1702892603.598858]: Found primary_key collision in table Pose value: 97 max value in memory 2065\n", + "[INFO] [1702892603.600358]: Found primary_key collision in table Pose value: 98 max value in memory 2066\n", + "[INFO] [1702892603.601913]: Found primary_key collision in table Pose value: 99 max value in memory 2067\n", + "[INFO] [1702892603.603423]: Found primary_key collision in table Pose value: 100 max value in memory 2068\n", + "[INFO] [1702892603.604792]: Found primary_key collision in table Pose value: 101 max value in memory 2069\n", + "[INFO] [1702892603.606115]: Found primary_key collision in table Pose value: 102 max value in memory 2070\n", + "[INFO] [1702892603.607429]: Found primary_key collision in table Pose value: 103 max value in memory 2071\n", + "[INFO] [1702892603.608695]: Found primary_key collision in table Pose value: 104 max value in memory 2072\n", + "[INFO] [1702892603.610167]: Found primary_key collision in table Pose value: 105 max value in memory 2073\n", + "[INFO] [1702892603.611536]: Found primary_key collision in table Pose value: 106 max value in memory 2074\n", + "[INFO] [1702892603.612889]: Found primary_key collision in table Pose value: 107 max value in memory 2075\n", + "[INFO] [1702892603.614208]: Found primary_key collision in table Pose value: 108 max value in memory 2076\n", + "[INFO] [1702892603.615500]: Found primary_key collision in table Pose value: 47 max value in memory 2077\n", + "[INFO] [1702892603.616950]: Found primary_key collision in table Pose value: 48 max value in memory 2078\n", + "[INFO] [1702892603.618406]: Found primary_key collision in table Pose value: 49 max value in memory 2079\n", + "[INFO] [1702892603.619843]: Found primary_key collision in table Pose value: 50 max value in memory 2080\n", + "[INFO] [1702892603.621265]: Found primary_key collision in table Pose value: 51 max value in memory 2081\n", + "[INFO] [1702892603.622664]: Found primary_key collision in table Pose value: 52 max value in memory 2082\n", + "[INFO] [1702892603.624120]: Found primary_key collision in table Pose value: 53 max value in memory 2083\n", + "[INFO] [1702892603.625526]: Found primary_key collision in table Pose value: 54 max value in memory 2084\n", + "[INFO] [1702892603.626814]: Found primary_key collision in table Pose value: 55 max value in memory 2085\n", + "[INFO] [1702892603.628139]: Found primary_key collision in table Pose value: 56 max value in memory 2086\n", + "[INFO] [1702892603.629465]: Found primary_key collision in table Pose value: 57 max value in memory 2087\n", + "[INFO] [1702892603.630878]: Found primary_key collision in table Pose value: 58 max value in memory 2088\n", + "[INFO] [1702892603.632168]: Found primary_key collision in table Pose value: 59 max value in memory 2089\n", + "[INFO] [1702892603.633482]: Found primary_key collision in table Pose value: 60 max value in memory 2090\n", + "[INFO] [1702892603.634814]: Found primary_key collision in table Pose value: 61 max value in memory 2091\n", + "[INFO] [1702892603.636187]: Found primary_key collision in table Pose value: 62 max value in memory 2092\n", + "[INFO] [1702892603.637544]: Found primary_key collision in table Pose value: 63 max value in memory 2093\n", + "[INFO] [1702892603.638954]: Found primary_key collision in table Pose value: 64 max value in memory 2094\n", + "[INFO] [1702892603.640254]: Found primary_key collision in table Pose value: 65 max value in memory 2095\n", + "[INFO] [1702892603.641594]: Found primary_key collision in table Pose value: 66 max value in memory 2096\n", + "[INFO] [1702892603.643024]: Found primary_key collision in table Pose value: 67 max value in memory 2097\n", + "[INFO] [1702892603.644434]: Found primary_key collision in table Pose value: 68 max value in memory 2098\n", + "[INFO] [1702892603.645938]: Found primary_key collision in table Pose value: 69 max value in memory 2099\n", + "[INFO] [1702892603.647277]: Found primary_key collision in table Pose value: 70 max value in memory 2100\n", + "[INFO] [1702892603.668753]: Found primary_key collision in table Object value: 10 max value in memory 199\n", + "[INFO] [1702892603.671371]: Found primary_key collision in table Object value: 11 max value in memory 200\n", + "[INFO] [1702892603.672834]: Found primary_key collision in table Object value: 5 max value in memory 201\n", + "[INFO] [1702892603.674181]: Found primary_key collision in table Object value: 6 max value in memory 202\n", + "[INFO] [1702892603.675511]: Found primary_key collision in table Object value: 7 max value in memory 203\n", + "[INFO] [1702892603.676858]: Found primary_key collision in table Object value: 12 max value in memory 204\n", + "[INFO] [1702892603.678637]: Found primary_key collision in table Object value: 1 max value in memory 205\n", + "[INFO] [1702892603.680058]: Found primary_key collision in table Object value: 2 max value in memory 206\n", + "[INFO] [1702892603.681441]: Found primary_key collision in table Object value: 3 max value in memory 207\n", + "[INFO] [1702892603.682754]: Found primary_key collision in table Object value: 4 max value in memory 208\n", + "[INFO] [1702892603.684058]: Found primary_key collision in table Object value: 8 max value in memory 209\n", + "[INFO] [1702892603.685340]: Found primary_key collision in table Object value: 9 max value in memory 210\n", + "[INFO] [1702892603.696390]: Found primary_key collision in table RobotState value: 45 max value in memory 793\n", + "[INFO] [1702892603.698693]: Found primary_key collision in table RobotState value: 46 max value in memory 794\n", + "[INFO] [1702892603.700180]: Found primary_key collision in table RobotState value: 47 max value in memory 795\n", + "[INFO] [1702892603.701577]: Found primary_key collision in table RobotState value: 48 max value in memory 796\n", + "[INFO] [1702892603.703003]: Found primary_key collision in table RobotState value: 1 max value in memory 797\n", + "[INFO] [1702892603.704482]: Found primary_key collision in table RobotState value: 2 max value in memory 798\n", + "[INFO] [1702892603.705867]: Found primary_key collision in table RobotState value: 3 max value in memory 799\n", + "[INFO] [1702892603.707144]: Found primary_key collision in table RobotState value: 4 max value in memory 800\n", + "[INFO] [1702892603.708363]: Found primary_key collision in table RobotState value: 5 max value in memory 801\n", + "[INFO] [1702892603.709575]: Found primary_key collision in table RobotState value: 6 max value in memory 802\n", + "[INFO] [1702892603.711074]: Found primary_key collision in table RobotState value: 7 max value in memory 803\n", + "[INFO] [1702892603.712584]: Found primary_key collision in table RobotState value: 8 max value in memory 804\n", + "[INFO] [1702892603.714038]: Found primary_key collision in table RobotState value: 9 max value in memory 805\n", + "[INFO] [1702892603.715784]: Found primary_key collision in table RobotState value: 10 max value in memory 806\n", + "[INFO] [1702892603.717531]: Found primary_key collision in table RobotState value: 11 max value in memory 807\n", + "[INFO] [1702892603.719122]: Found primary_key collision in table RobotState value: 12 max value in memory 808\n", + "[INFO] [1702892603.720323]: Found primary_key collision in table RobotState value: 13 max value in memory 809\n", + "[INFO] [1702892603.721465]: Found primary_key collision in table RobotState value: 14 max value in memory 810\n", + "[INFO] [1702892603.722592]: Found primary_key collision in table RobotState value: 15 max value in memory 811\n", + "[INFO] [1702892603.723783]: Found primary_key collision in table RobotState value: 16 max value in memory 812\n", + "[INFO] [1702892603.724930]: Found primary_key collision in table RobotState value: 17 max value in memory 813\n", + "[INFO] [1702892603.726295]: Found primary_key collision in table RobotState value: 18 max value in memory 814\n", + "[INFO] [1702892603.727405]: Found primary_key collision in table RobotState value: 19 max value in memory 815\n", + "[INFO] [1702892603.728497]: Found primary_key collision in table RobotState value: 20 max value in memory 816\n", + "[INFO] [1702892603.729879]: Found primary_key collision in table RobotState value: 29 max value in memory 817\n", + "[INFO] [1702892603.731168]: Found primary_key collision in table RobotState value: 30 max value in memory 818\n", + "[INFO] [1702892603.732379]: Found primary_key collision in table RobotState value: 31 max value in memory 819\n", + "[INFO] [1702892603.733594]: Found primary_key collision in table RobotState value: 32 max value in memory 820\n", + "[INFO] [1702892603.734814]: Found primary_key collision in table RobotState value: 33 max value in memory 821\n", + "[INFO] [1702892603.735975]: Found primary_key collision in table RobotState value: 34 max value in memory 822\n", + "[INFO] [1702892603.737244]: Found primary_key collision in table RobotState value: 35 max value in memory 823\n", + "[INFO] [1702892603.738476]: Found primary_key collision in table RobotState value: 36 max value in memory 824\n", + "[INFO] [1702892603.739651]: Found primary_key collision in table RobotState value: 37 max value in memory 825\n", + "[INFO] [1702892603.740876]: Found primary_key collision in table RobotState value: 38 max value in memory 826\n", + "[INFO] [1702892603.742077]: Found primary_key collision in table RobotState value: 39 max value in memory 827\n", + "[INFO] [1702892603.743277]: Found primary_key collision in table RobotState value: 40 max value in memory 828\n", + "[INFO] [1702892603.744454]: Found primary_key collision in table RobotState value: 41 max value in memory 829\n", + "[INFO] [1702892603.745687]: Found primary_key collision in table RobotState value: 42 max value in memory 830\n", + "[INFO] [1702892603.746907]: Found primary_key collision in table RobotState value: 43 max value in memory 831\n", + "[INFO] [1702892603.747995]: Found primary_key collision in table RobotState value: 44 max value in memory 832\n", + "[INFO] [1702892603.749097]: Found primary_key collision in table RobotState value: 21 max value in memory 833\n", + "[INFO] [1702892603.750245]: Found primary_key collision in table RobotState value: 22 max value in memory 834\n", + "[INFO] [1702892603.751361]: Found primary_key collision in table RobotState value: 23 max value in memory 835\n", + "[INFO] [1702892603.752490]: Found primary_key collision in table RobotState value: 24 max value in memory 836\n", + "[INFO] [1702892603.753678]: Found primary_key collision in table RobotState value: 25 max value in memory 837\n", + "[INFO] [1702892603.754895]: Found primary_key collision in table RobotState value: 26 max value in memory 838\n", + "[INFO] [1702892603.756134]: Found primary_key collision in table RobotState value: 27 max value in memory 839\n", + "[INFO] [1702892603.757387]: Found primary_key collision in table RobotState value: 28 max value in memory 840\n", + "[INFO] [1702892603.772215]: Found primary_key collision in table TaskTreeNode value: 21 max value in memory 1931\n", + "[INFO] [1702892603.774391]: Found primary_key collision in table TaskTreeNode value: 22 max value in memory 1932\n", + "[INFO] [1702892603.776301]: Found primary_key collision in table TaskTreeNode value: 41 max value in memory 1933\n", + "[INFO] [1702892603.777767]: Found primary_key collision in table TaskTreeNode value: 60 max value in memory 1934\n", + "[INFO] [1702892603.779259]: Found primary_key collision in table TaskTreeNode value: 61 max value in memory 1935\n", + "[INFO] [1702892603.780743]: Found primary_key collision in table TaskTreeNode value: 80 max value in memory 1936\n", + "[INFO] [1702892603.782258]: Found primary_key collision in table TaskTreeNode value: 37 max value in memory 1937\n", + "[INFO] [1702892603.783487]: Found primary_key collision in table TaskTreeNode value: 38 max value in memory 1938\n", + "[INFO] [1702892603.784754]: Found primary_key collision in table TaskTreeNode value: 39 max value in memory 1939\n", + "[INFO] [1702892603.785948]: Found primary_key collision in table TaskTreeNode value: 40 max value in memory 1940\n", + "[INFO] [1702892603.787200]: Found primary_key collision in table TaskTreeNode value: 42 max value in memory 1941\n", + "[INFO] [1702892603.788421]: Found primary_key collision in table TaskTreeNode value: 43 max value in memory 1942\n", + "[INFO] [1702892603.789645]: Found primary_key collision in table TaskTreeNode value: 44 max value in memory 1943\n", + "[INFO] [1702892603.790990]: Found primary_key collision in table TaskTreeNode value: 45 max value in memory 1944\n", + "[INFO] [1702892603.792319]: Found primary_key collision in table TaskTreeNode value: 46 max value in memory 1945\n", + "[INFO] [1702892603.793724]: Found primary_key collision in table TaskTreeNode value: 47 max value in memory 1946\n", + "[INFO] [1702892603.795317]: Found primary_key collision in table TaskTreeNode value: 48 max value in memory 1947\n", + "[INFO] [1702892603.796656]: Found primary_key collision in table TaskTreeNode value: 49 max value in memory 1948\n", + "[INFO] [1702892603.797934]: Found primary_key collision in table TaskTreeNode value: 50 max value in memory 1949\n", + "[INFO] [1702892603.799231]: Found primary_key collision in table TaskTreeNode value: 51 max value in memory 1950\n", + "[INFO] [1702892603.800622]: Found primary_key collision in table TaskTreeNode value: 52 max value in memory 1951\n", + "[INFO] [1702892603.802094]: Found primary_key collision in table TaskTreeNode value: 53 max value in memory 1952\n", + "[INFO] [1702892603.803490]: Found primary_key collision in table TaskTreeNode value: 54 max value in memory 1953\n", + "[INFO] [1702892603.805110]: Found primary_key collision in table TaskTreeNode value: 55 max value in memory 1954\n", + "[INFO] [1702892603.806565]: Found primary_key collision in table TaskTreeNode value: 56 max value in memory 1955\n", + "[INFO] [1702892603.808057]: Found primary_key collision in table TaskTreeNode value: 57 max value in memory 1956\n", + "[INFO] [1702892603.809608]: Found primary_key collision in table TaskTreeNode value: 58 max value in memory 1957\n", + "[INFO] [1702892603.811123]: Found primary_key collision in table TaskTreeNode value: 59 max value in memory 1958\n", + "[INFO] [1702892603.812536]: Found primary_key collision in table TaskTreeNode value: 62 max value in memory 1959\n", + "[INFO] [1702892603.814250]: Found primary_key collision in table TaskTreeNode value: 63 max value in memory 1960\n", + "[INFO] [1702892603.815659]: Found primary_key collision in table TaskTreeNode value: 64 max value in memory 1961\n", + "[INFO] [1702892603.817213]: Found primary_key collision in table TaskTreeNode value: 65 max value in memory 1962\n", + "[INFO] [1702892603.818590]: Found primary_key collision in table TaskTreeNode value: 66 max value in memory 1963\n", + "[INFO] [1702892603.819995]: Found primary_key collision in table TaskTreeNode value: 67 max value in memory 1964\n", + "[INFO] [1702892603.821384]: Found primary_key collision in table TaskTreeNode value: 68 max value in memory 1965\n", + "[INFO] [1702892603.822762]: Found primary_key collision in table TaskTreeNode value: 69 max value in memory 1966\n", + "[INFO] [1702892603.824055]: Found primary_key collision in table TaskTreeNode value: 70 max value in memory 1967\n", + "[INFO] [1702892603.825581]: Found primary_key collision in table TaskTreeNode value: 71 max value in memory 1968\n", + "[INFO] [1702892603.826953]: Found primary_key collision in table TaskTreeNode value: 72 max value in memory 1969\n", + "[INFO] [1702892603.828198]: Found primary_key collision in table TaskTreeNode value: 73 max value in memory 1970\n", + "[INFO] [1702892603.829466]: Found primary_key collision in table TaskTreeNode value: 74 max value in memory 1971\n", + "[INFO] [1702892603.830879]: Found primary_key collision in table TaskTreeNode value: 75 max value in memory 1972\n", + "[INFO] [1702892603.832298]: Found primary_key collision in table TaskTreeNode value: 76 max value in memory 1973\n", + "[INFO] [1702892603.833627]: Found primary_key collision in table TaskTreeNode value: 77 max value in memory 1974\n", + "[INFO] [1702892603.835037]: Found primary_key collision in table TaskTreeNode value: 78 max value in memory 1975\n", + "[INFO] [1702892603.836374]: Found primary_key collision in table TaskTreeNode value: 79 max value in memory 1976\n", + "[INFO] [1702892603.837759]: Found primary_key collision in table TaskTreeNode value: 15 max value in memory 1977\n", + "[INFO] [1702892603.839082]: Found primary_key collision in table TaskTreeNode value: 16 max value in memory 1978\n", + "[INFO] [1702892603.840438]: Found primary_key collision in table TaskTreeNode value: 17 max value in memory 1979\n", + "[INFO] [1702892603.841791]: Found primary_key collision in table TaskTreeNode value: 18 max value in memory 1980\n", + "[INFO] [1702892603.843259]: Found primary_key collision in table TaskTreeNode value: 19 max value in memory 1981\n", + "[INFO] [1702892603.844700]: Found primary_key collision in table TaskTreeNode value: 20 max value in memory 1982\n", + "[INFO] [1702892603.845952]: Found primary_key collision in table TaskTreeNode value: 23 max value in memory 1983\n", + "[INFO] [1702892603.847199]: Found primary_key collision in table TaskTreeNode value: 24 max value in memory 1984\n", + "[INFO] [1702892603.848744]: Found primary_key collision in table TaskTreeNode value: 25 max value in memory 1985\n", + "[INFO] [1702892603.850066]: Found primary_key collision in table TaskTreeNode value: 26 max value in memory 1986\n", + "[INFO] [1702892603.851340]: Found primary_key collision in table TaskTreeNode value: 27 max value in memory 1987\n", + "[INFO] [1702892603.852648]: Found primary_key collision in table TaskTreeNode value: 28 max value in memory 1988\n", + "[INFO] [1702892603.853944]: Found primary_key collision in table TaskTreeNode value: 29 max value in memory 1989\n", + "[INFO] [1702892603.855369]: Found primary_key collision in table TaskTreeNode value: 30 max value in memory 1990\n", + "[INFO] [1702892603.856790]: Found primary_key collision in table TaskTreeNode value: 31 max value in memory 1991\n", + "[INFO] [1702892603.858132]: Found primary_key collision in table TaskTreeNode value: 32 max value in memory 1992\n", + "[INFO] [1702892603.859659]: Found primary_key collision in table TaskTreeNode value: 33 max value in memory 1993\n", + "[INFO] [1702892603.860972]: Found primary_key collision in table TaskTreeNode value: 34 max value in memory 1994\n", + "[INFO] [1702892603.862272]: Found primary_key collision in table TaskTreeNode value: 35 max value in memory 1995\n", + "[INFO] [1702892603.863750]: Found primary_key collision in table TaskTreeNode value: 36 max value in memory 1996\n", + "[INFO] [1702892603.865127]: Found primary_key collision in table TaskTreeNode value: 81 max value in memory 1997\n", + "[INFO] [1702892603.866404]: Found primary_key collision in table TaskTreeNode value: 82 max value in memory 1998\n", + "[INFO] [1702892603.867646]: Found primary_key collision in table TaskTreeNode value: 83 max value in memory 1999\n", + "[INFO] [1702892603.868955]: Found primary_key collision in table TaskTreeNode value: 84 max value in memory 2000\n", + "[INFO] [1702892603.873607]: Found primary_key collision in table TaskTreeNode value: 1 max value in memory 2001\n", + "[INFO] [1702892603.874894]: Found primary_key collision in table TaskTreeNode value: 2 max value in memory 2002\n", + "[INFO] [1702892603.876474]: Found primary_key collision in table TaskTreeNode value: 3 max value in memory 2003\n", + "[INFO] [1702892603.877960]: Found primary_key collision in table TaskTreeNode value: 4 max value in memory 2004\n", + "[INFO] [1702892603.879490]: Found primary_key collision in table TaskTreeNode value: 5 max value in memory 2005\n", + "[INFO] [1702892603.880989]: Found primary_key collision in table TaskTreeNode value: 6 max value in memory 2006\n", + "[INFO] [1702892603.882616]: Found primary_key collision in table TaskTreeNode value: 7 max value in memory 2007\n", + "[INFO] [1702892603.884122]: Found primary_key collision in table TaskTreeNode value: 8 max value in memory 2008\n", + "[INFO] [1702892603.885468]: Found primary_key collision in table TaskTreeNode value: 9 max value in memory 2009\n", + "[INFO] [1702892603.886817]: Found primary_key collision in table TaskTreeNode value: 10 max value in memory 2010\n", + "[INFO] [1702892603.888091]: Found primary_key collision in table TaskTreeNode value: 11 max value in memory 2011\n", + "[INFO] [1702892603.889334]: Found primary_key collision in table TaskTreeNode value: 12 max value in memory 2012\n", + "[INFO] [1702892603.890574]: Found primary_key collision in table TaskTreeNode value: 13 max value in memory 2013\n", + "[INFO] [1702892603.891792]: Found primary_key collision in table TaskTreeNode value: 14 max value in memory 2014\n", + "[INFO] [1702892603.893039]: Found primary_key collision in table TaskTreeNode value: 99 max value in memory 2015\n", + "[INFO] [1702892603.894349]: Found primary_key collision in table TaskTreeNode value: 85 max value in memory 2016\n", + "[INFO] [1702892603.895629]: Found primary_key collision in table TaskTreeNode value: 86 max value in memory 2017\n", + "[INFO] [1702892603.896842]: Found primary_key collision in table TaskTreeNode value: 87 max value in memory 2018\n", + "[INFO] [1702892603.898577]: Found primary_key collision in table TaskTreeNode value: 88 max value in memory 2019\n", + "[INFO] [1702892603.900142]: Found primary_key collision in table TaskTreeNode value: 89 max value in memory 2020\n", + "[INFO] [1702892603.901588]: Found primary_key collision in table TaskTreeNode value: 90 max value in memory 2021\n", + "[INFO] [1702892603.902976]: Found primary_key collision in table TaskTreeNode value: 91 max value in memory 2022\n", + "[INFO] [1702892603.904351]: Found primary_key collision in table TaskTreeNode value: 92 max value in memory 2023\n", + "[INFO] [1702892603.905725]: Found primary_key collision in table TaskTreeNode value: 93 max value in memory 2024\n", + "[INFO] [1702892603.907293]: Found primary_key collision in table TaskTreeNode value: 94 max value in memory 2025\n", + "[INFO] [1702892603.908561]: Found primary_key collision in table TaskTreeNode value: 95 max value in memory 2026\n", + "[INFO] [1702892603.909826]: Found primary_key collision in table TaskTreeNode value: 96 max value in memory 2027\n", + "[INFO] [1702892603.911282]: Found primary_key collision in table TaskTreeNode value: 97 max value in memory 2028\n", + "[INFO] [1702892603.912627]: Found primary_key collision in table TaskTreeNode value: 98 max value in memory 2029\n", + "[INFO] [1702892603.913994]: Found primary_key collision in table TaskTreeNode value: 100 max value in memory 2030\n", + "[INFO] [1702892603.915312]: Found primary_key collision in table TaskTreeNode value: 101 max value in memory 2031\n", + "[INFO] [1702892603.916602]: Found primary_key collision in table TaskTreeNode value: 102 max value in memory 2032\n", + "[INFO] [1702892603.917930]: Found primary_key collision in table TaskTreeNode value: 103 max value in memory 2033\n", + "[INFO] [1702892603.919319]: Found primary_key collision in table TaskTreeNode value: 104 max value in memory 2034\n", + "[INFO] [1702892603.920707]: Found primary_key collision in table TaskTreeNode value: 105 max value in memory 2035\n", + "[INFO] [1702892603.922010]: Found primary_key collision in table TaskTreeNode value: 106 max value in memory 2036\n", + "[INFO] [1702892603.923371]: Found primary_key collision in table TaskTreeNode value: 107 max value in memory 2037\n", + "[INFO] [1702892603.924678]: Found primary_key collision in table TaskTreeNode value: 108 max value in memory 2038\n", + "[INFO] [1702892603.925986]: Found primary_key collision in table TaskTreeNode value: 109 max value in memory 2039\n", + "[INFO] [1702892603.927282]: Found primary_key collision in table TaskTreeNode value: 110 max value in memory 2040\n", + "[INFO] [1702892603.928577]: Found primary_key collision in table TaskTreeNode value: 111 max value in memory 2041\n", + "[INFO] [1702892603.929875]: Found primary_key collision in table TaskTreeNode value: 112 max value in memory 2042\n", + "[INFO] [1702892603.931169]: Found primary_key collision in table TaskTreeNode value: 113 max value in memory 2043\n", + "[INFO] [1702892603.932508]: Found primary_key collision in table TaskTreeNode value: 114 max value in memory 2044\n", + "[INFO] [1702892603.933871]: Found primary_key collision in table TaskTreeNode value: 115 max value in memory 2045\n", + "[INFO] [1702892603.935261]: Found primary_key collision in table TaskTreeNode value: 116 max value in memory 2046\n", + "[INFO] [1702892603.936588]: Found primary_key collision in table TaskTreeNode value: 117 max value in memory 2047\n" + ] + } + ], "source": [ "pycram.orm.utils.migrate_neems(source_session_maker,destination_session_maker)" ] @@ -123,13 +1051,75 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "e0e50ba7", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(datetime.datetime(2023, 11, 29, 12, 28, 19, 421998), 'nleusmann', 'Unittest: Example pick and place 2', '1062bfbfa94148ed688780f8dd4abcffe469002a', 4)\n", + "(datetime.datetime(2023, 11, 29, 12, 30, 38, 751063), 'nleusmann', 'Unittest: Example pick and place 0', '1062bfbfa94148ed688780f8dd4abcffe469002a', 5)\n", + "(datetime.datetime(2023, 11, 29, 12, 30, 50, 255843), 'nleusmann', 'Unittest: Example pick and place 1', '1062bfbfa94148ed688780f8dd4abcffe469002a', 6)\n", + "(datetime.datetime(2023, 11, 29, 12, 31, 2, 61501), 'nleusmann', 'Unittest: Example pick and place 2', '1062bfbfa94148ed688780f8dd4abcffe469002a', 7)\n", + "(datetime.datetime(2023, 11, 29, 12, 21, 0, 107802), 'nleusmann', 'Not all who wander are lost', '1062bfbfa94148ed688780f8dd4abcffe469002a', 8)\n", + "(datetime.datetime(2023, 11, 29, 12, 27, 55, 788287), 'nleusmann', 'Unittest: Example pick and place 0', '1062bfbfa94148ed688780f8dd4abcffe469002a', 9)\n", + "(datetime.datetime(2023, 11, 29, 12, 28, 7, 431814), 'nleusmann', 'Unittest: Example pick and place 1', '1062bfbfa94148ed688780f8dd4abcffe469002a', 10)\n", + "(datetime.datetime(2023, 11, 29, 13, 1, 49), 'nleusmann', 'Unittest: Example pick and place 0', '1062bfbfa94148ed688780f8dd4abcffe469002a', 11)\n", + "(datetime.datetime(2023, 11, 29, 13, 2), 'nleusmann', 'Unittest: Example pick and place 1', '1062bfbfa94148ed688780f8dd4abcffe469002a', 12)\n", + "(datetime.datetime(2023, 11, 29, 13, 2, 12), 'nleusmann', 'Unittest: Example pick and place 2', '1062bfbfa94148ed688780f8dd4abcffe469002a', 13)\n", + "(datetime.datetime(2023, 11, 29, 13, 5, 29), 'nleusmann', 'Hedgehog Unittest: Example pick and place 0', '1062bfbfa94148ed688780f8dd4abcffe469002a', 14)\n", + "(datetime.datetime(2023, 11, 29, 13, 5, 40), 'nleusmann', 'Hedgehog Unittest: Example pick and place 1', '1062bfbfa94148ed688780f8dd4abcffe469002a', 15)\n", + "(datetime.datetime(2023, 11, 29, 13, 5, 52), 'nleusmann', 'Hedgehog Unittest: Example pick and place 2', '1062bfbfa94148ed688780f8dd4abcffe469002a', 16)\n", + "(datetime.datetime(2023, 11, 29, 14, 9, 42), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '1062bfbfa94148ed688780f8dd4abcffe469002a', 17)\n", + "(datetime.datetime(2023, 11, 29, 14, 9, 54), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '1062bfbfa94148ed688780f8dd4abcffe469002a', 18)\n", + "(datetime.datetime(2023, 11, 29, 14, 10, 5), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '1062bfbfa94148ed688780f8dd4abcffe469002a', 19)\n", + "(datetime.datetime(2023, 11, 30, 9, 50), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '0e658d295505ea8081ed18334dce5f9331aa0796', 20)\n", + "(datetime.datetime(2023, 11, 30, 9, 50, 11), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '0e658d295505ea8081ed18334dce5f9331aa0796', 21)\n", + "(datetime.datetime(2023, 11, 30, 9, 50, 23), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '0e658d295505ea8081ed18334dce5f9331aa0796', 22)\n", + "(datetime.datetime(2023, 11, 30, 12, 58, 57), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '0e658d295505ea8081ed18334dce5f9331aa0796', 23)\n", + "(datetime.datetime(2023, 11, 30, 12, 59, 9), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '0e658d295505ea8081ed18334dce5f9331aa0796', 24)\n", + "(datetime.datetime(2023, 11, 30, 12, 59, 21), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '0e658d295505ea8081ed18334dce5f9331aa0796', 25)\n", + "(datetime.datetime(2023, 11, 30, 14, 38, 8), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '0e658d295505ea8081ed18334dce5f9331aa0796', 26)\n", + "(datetime.datetime(2023, 11, 30, 14, 38, 19), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '0e658d295505ea8081ed18334dce5f9331aa0796', 27)\n", + "(datetime.datetime(2023, 11, 30, 14, 38, 31), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '0e658d295505ea8081ed18334dce5f9331aa0796', 28)\n", + "(datetime.datetime(2023, 12, 1, 13, 39, 10), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '04f2df4808909991521385b95d69908c943dc359', 29)\n", + "(datetime.datetime(2023, 12, 1, 13, 39, 22), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '04f2df4808909991521385b95d69908c943dc359', 30)\n", + "(datetime.datetime(2023, 12, 1, 13, 39, 34), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '04f2df4808909991521385b95d69908c943dc359', 31)\n", + "(datetime.datetime(2023, 12, 8, 13, 17, 28), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 32)\n", + "(datetime.datetime(2023, 12, 8, 13, 17, 40), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 33)\n", + "(datetime.datetime(2023, 12, 8, 13, 17, 52), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 34)\n", + "(datetime.datetime(2023, 12, 8, 13, 35, 39), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 35)\n", + "(datetime.datetime(2023, 12, 8, 13, 35, 51), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 36)\n", + "(datetime.datetime(2023, 12, 8, 13, 36, 3), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 37)\n", + "(datetime.datetime(2023, 12, 8, 13, 47, 5), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 38)\n", + "(datetime.datetime(2023, 12, 8, 13, 47, 17), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 39)\n", + "(datetime.datetime(2023, 12, 8, 13, 47, 29), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '3cde3e28da8d3f3aacaae7a5687fb15138c920c9', 40)\n", + "(datetime.datetime(2023, 12, 8, 13, 58, 44), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '18b25fd2fcc327adad7cb736fc236a973253e74d', 41)\n", + "(datetime.datetime(2023, 12, 8, 13, 58, 55), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '18b25fd2fcc327adad7cb736fc236a973253e74d', 42)\n", + "(datetime.datetime(2023, 12, 8, 13, 59, 7), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '18b25fd2fcc327adad7cb736fc236a973253e74d', 43)\n", + "(datetime.datetime(2023, 12, 8, 15, 3, 5), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '18b25fd2fcc327adad7cb736fc236a973253e74d', 44)\n", + "(datetime.datetime(2023, 12, 8, 15, 3, 17), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '18b25fd2fcc327adad7cb736fc236a973253e74d', 45)\n", + "(datetime.datetime(2023, 12, 8, 15, 3, 29), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '18b25fd2fcc327adad7cb736fc236a973253e74d', 46)\n", + "(datetime.datetime(2023, 12, 11, 11, 0, 18), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '96c94164939638dd2eda3d2bbf750dd552715d5f', 47)\n", + "(datetime.datetime(2023, 12, 11, 11, 0, 30), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '96c94164939638dd2eda3d2bbf750dd552715d5f', 48)\n", + "(datetime.datetime(2023, 12, 11, 11, 0, 42), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '96c94164939638dd2eda3d2bbf750dd552715d5f', 49)\n", + "(datetime.datetime(2023, 12, 11, 11, 4, 4), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '96c94164939638dd2eda3d2bbf750dd552715d5f', 50)\n", + "(datetime.datetime(2023, 12, 11, 11, 4, 15), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '96c94164939638dd2eda3d2bbf750dd552715d5f', 51)\n", + "(datetime.datetime(2023, 12, 11, 11, 4, 26), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '96c94164939638dd2eda3d2bbf750dd552715d5f', 52)\n", + "(datetime.datetime(2023, 12, 18, 9, 39, 36), 'nleusmann', 'Example Plan 0', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 1)\n", + "(datetime.datetime(2023, 12, 18, 9, 39, 48), 'nleusmann', 'Example Plan 1', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 2)\n", + "(datetime.datetime(2023, 12, 18, 9, 39, 59), 'nleusmann', 'Example Plan 2', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 3)\n" + ] + } + ], "source": [ "with destination_session_maker() as session:\n", - " session.query(pycram.orm.base.Base.ProcessMetaData).all()" + " statement = sqlalchemy.select('*').select_from(pycram.orm.base.ProcessMetaData)\n", + " result = session.execute(statement).all()\n", + " for item in result:\n", + " print(item)" ] } ], @@ -149,7 +1139,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.11" + "version": "3.8.10" } }, "nbformat": 4, From 54c6b1241a5c305e5ccd55bbcb742e3b986dbce5 Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Mon, 18 Dec 2023 11:22:14 +0100 Subject: [PATCH 33/34] Adds explanation what to look out for in the print --- examples/migrate_neems.ipynb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/examples/migrate_neems.ipynb b/examples/migrate_neems.ipynb index 6ac1f76ab..947c551db 100644 --- a/examples/migrate_neems.ipynb +++ b/examples/migrate_neems.ipynb @@ -1121,6 +1121,16 @@ " for item in result:\n", " print(item)" ] + }, + { + "cell_type": "markdown", + "source": [ + "Looking at all the output, we can clearly see that the PyCRORM NEEM-Hub now contains our Example Plans 0 - 2. " + ], + "metadata": { + "collapsed": false + }, + "id": "2ddf3d708b29b04d" } ], "metadata": { From af343656dd2d615259c5df4543b56260cf8d358e Mon Sep 17 00:00:00 2001 From: Nils Leusmann Date: Tue, 19 Dec 2023 13:07:03 +0100 Subject: [PATCH 34/34] Finally updates the output data --- examples/migrate_neems.ipynb | 1695 +++++++++++++++++----------------- 1 file changed, 872 insertions(+), 823 deletions(-) diff --git a/examples/migrate_neems.ipynb b/examples/migrate_neems.ipynb index 947c551db..db3baabe5 100644 --- a/examples/migrate_neems.ipynb +++ b/examples/migrate_neems.ipynb @@ -21,12 +21,32 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "12a7af50-308e-4579-b774-41e7512d673a", "metadata": { - "is_executing": true + "ExecuteTime": { + "end_time": "2023-12-19T10:51:09.603703147Z", + "start_time": "2023-12-19T10:51:08.852604926Z" + } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "pybullet build time: Nov 28 2023 23:51:11\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='base_laser_link']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='wide_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='narrow_stereo_optical_frame']\n", + "Unknown attribute \"type\" in /robot[@name='pr2']/link[@name='laser_tilt_link']\n", + "/home/nleusmann/catkin_ws/src/pycram/src/pycram/orm/action_designator.py:10: SAWarning: Implicitly combining column Designator.dtype with column Action.dtype under attribute 'dtype'. Please configure one or more attributes for these same-named columns explicitly.\n", + " class Action(MapperArgsMixin, Designator):\n", + "/home/nleusmann/catkin_ws/src/pycram/src/pycram/orm/motion_designator.py:16: SAWarning: Implicitly combining column Designator.dtype with column Motion.dtype under attribute 'dtype'. Please configure one or more attributes for these same-named columns explicitly.\n", + " class Motion(MapperArgsMixin, Designator):\n", + "[WARN] [1702983069.575976]: Failed to import Giskard messages\n" + ] + } + ], "source": [ "import sqlalchemy.orm\n", "import pycram\n", @@ -48,10 +68,13 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "4698d10a573e8316", "metadata": { - "is_executing": true + "ExecuteTime": { + "end_time": "2023-12-19T10:51:22.457680892Z", + "start_time": "2023-12-19T10:51:22.427575091Z" + } }, "outputs": [], "source": [ @@ -71,9 +94,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "id": "fb4df6cb-c7f8-4cd8-8db8-bc8668dfeade", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-12-19T10:51:24.988885709Z", + "start_time": "2023-12-19T10:51:24.745896959Z" + } + }, "outputs": [], "source": [ "from pycram.enums import Arms, ObjectType\n", @@ -124,9 +152,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "id": "ff1eb1b5b405ca09", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-12-19T10:52:11.153019806Z", + "start_time": "2023-12-19T10:51:35.523989623Z" + } + }, "outputs": [ { "name": "stderr", @@ -159,7 +192,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:00<00:00, 120.02it/s]\n" + "Inserting TaskTree into database: 100%|██████████| 20/20 [00:00<00:00, 99.07it/s]\n" ] }, { @@ -173,7 +206,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 39/39 [00:00<00:00, 135.86it/s]\n" + "Inserting TaskTree into database: 100%|██████████| 39/39 [00:00<00:00, 125.94it/s]\n" ] }, { @@ -187,7 +220,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Inserting TaskTree into database: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 58/58 [00:00<00:00, 131.35it/s]\n" + "Inserting TaskTree into database: 100%|██████████| 58/58 [00:00<00:00, 127.64it/s]\n" ] } ], @@ -224,816 +257,821 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "8e60334b0eccf4c4", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-12-19T10:52:22.393762307Z", + "start_time": "2023-12-19T10:52:20.364700821Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[INFO] [1702892602.683740]: ~~~~~~~~~~~~~~~~~~~~~~~~~ProcessMetaData~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.686164]: ~~~~~~~~~~~~~~~~~~~~~~~~~Color~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.687885]: ~~~~~~~~~~~~~~~~~~~~~~~~~Designator~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.689191]: ~~~~~~~~~~~~~~~~~~~~~~~~~Position~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.690526]: ~~~~~~~~~~~~~~~~~~~~~~~~~Quaternion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.692102]: ~~~~~~~~~~~~~~~~~~~~~~~~~Code~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.693552]: ~~~~~~~~~~~~~~~~~~~~~~~~~Motion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.694997]: ~~~~~~~~~~~~~~~~~~~~~~~~~Pose~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.696404]: ~~~~~~~~~~~~~~~~~~~~~~~~~ClosingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.697850]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.699282]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.700672]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveGripperMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.701990]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.703283]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTCPMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.704558]: ~~~~~~~~~~~~~~~~~~~~~~~~~Object~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.705856]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpeningMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.707145]: ~~~~~~~~~~~~~~~~~~~~~~~~~RobotState~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.708465]: ~~~~~~~~~~~~~~~~~~~~~~~~~TaskTreeNode~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.709725]: ~~~~~~~~~~~~~~~~~~~~~~~~~WorldStateDetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.711246]: ~~~~~~~~~~~~~~~~~~~~~~~~~AccessingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.712568]: ~~~~~~~~~~~~~~~~~~~~~~~~~Action~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.713830]: ~~~~~~~~~~~~~~~~~~~~~~~~~BelieveObject~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.715147]: ~~~~~~~~~~~~~~~~~~~~~~~~~ObjectPart~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.716466]: ~~~~~~~~~~~~~~~~~~~~~~~~~CloseAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.717774]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.719101]: ~~~~~~~~~~~~~~~~~~~~~~~~~GraspingAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.720397]: ~~~~~~~~~~~~~~~~~~~~~~~~~GripAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.721657]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookAtAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.722912]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTorsoAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.724208]: ~~~~~~~~~~~~~~~~~~~~~~~~~NavigateAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.725641]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpenAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.727206]: ~~~~~~~~~~~~~~~~~~~~~~~~~ParkArmsAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.728858]: ~~~~~~~~~~~~~~~~~~~~~~~~~PickUpAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.730467]: ~~~~~~~~~~~~~~~~~~~~~~~~~PlaceAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.732024]: ~~~~~~~~~~~~~~~~~~~~~~~~~Release~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.733402]: ~~~~~~~~~~~~~~~~~~~~~~~~~SetGripperAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.734699]: ~~~~~~~~~~~~~~~~~~~~~~~~~TransportAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", - "[INFO] [1702892602.738342]: Found primary_key collision in table ProcessMetaData value: 1 max value in memory 50\n", - "[INFO] [1702892602.745591]: Found primary_key collision in table ProcessMetaData value: 2 max value in memory 51\n", - "[INFO] [1702892602.751883]: Found primary_key collision in table ProcessMetaData value: 3 max value in memory 52\n", - "[INFO] [1702892602.772005]: Found primary_key collision in table Designator value: 33 max value in memory 1783\n", - "[INFO] [1702892602.776647]: Found primary_key collision in table Designator value: 34 max value in memory 1784\n", - "[INFO] [1702892602.779541]: Found primary_key collision in table Designator value: 35 max value in memory 1785\n", - "[INFO] [1702892602.782130]: Found primary_key collision in table Designator value: 36 max value in memory 1786\n", - "[INFO] [1702892602.785748]: Found primary_key collision in table Designator value: 37 max value in memory 1787\n", - "[INFO] [1702892602.787743]: Found primary_key collision in table Designator value: 38 max value in memory 1788\n", - "[INFO] [1702892602.789623]: Found primary_key collision in table Designator value: 39 max value in memory 1789\n", - "[INFO] [1702892602.791414]: Found primary_key collision in table Designator value: 40 max value in memory 1790\n", - "[INFO] [1702892602.793109]: Found primary_key collision in table Designator value: 41 max value in memory 1791\n", - "[INFO] [1702892602.794920]: Found primary_key collision in table Designator value: 42 max value in memory 1792\n", - "[INFO] [1702892602.796640]: Found primary_key collision in table Designator value: 43 max value in memory 1793\n", - "[INFO] [1702892602.798382]: Found primary_key collision in table Designator value: 44 max value in memory 1794\n", - "[INFO] [1702892602.799860]: Found primary_key collision in table Designator value: 45 max value in memory 1795\n", - "[INFO] [1702892602.801351]: Found primary_key collision in table Designator value: 46 max value in memory 1796\n", - "[INFO] [1702892602.802846]: Found primary_key collision in table Designator value: 47 max value in memory 1797\n", - "[INFO] [1702892602.804669]: Found primary_key collision in table Designator value: 48 max value in memory 1798\n", - "[INFO] [1702892602.806335]: Found primary_key collision in table Designator value: 49 max value in memory 1799\n", - "[INFO] [1702892602.807880]: Found primary_key collision in table Designator value: 50 max value in memory 1800\n", - "[INFO] [1702892602.809461]: Found primary_key collision in table Designator value: 51 max value in memory 1801\n", - "[INFO] [1702892602.810998]: Found primary_key collision in table Designator value: 52 max value in memory 1802\n", - "[INFO] [1702892602.812455]: Found primary_key collision in table Designator value: 53 max value in memory 1803\n", - "[INFO] [1702892602.813959]: Found primary_key collision in table Designator value: 54 max value in memory 1804\n", - "[INFO] [1702892602.815541]: Found primary_key collision in table Designator value: 55 max value in memory 1805\n", - "[INFO] [1702892602.817287]: Found primary_key collision in table Designator value: 56 max value in memory 1806\n", - "[INFO] [1702892602.818839]: Found primary_key collision in table Designator value: 57 max value in memory 1807\n", - "[INFO] [1702892602.820345]: Found primary_key collision in table Designator value: 58 max value in memory 1808\n", - "[INFO] [1702892602.822335]: Found primary_key collision in table Designator value: 59 max value in memory 1809\n", - "[INFO] [1702892602.823854]: Found primary_key collision in table Designator value: 60 max value in memory 1810\n", - "[INFO] [1702892602.825314]: Found primary_key collision in table Designator value: 61 max value in memory 1811\n", - "[INFO] [1702892602.826761]: Found primary_key collision in table Designator value: 62 max value in memory 1812\n", - "[INFO] [1702892602.828172]: Found primary_key collision in table Designator value: 63 max value in memory 1813\n", - "[INFO] [1702892602.829616]: Found primary_key collision in table Designator value: 64 max value in memory 1814\n", - "[INFO] [1702892602.831035]: Found primary_key collision in table Designator value: 65 max value in memory 1815\n", - "[INFO] [1702892602.832533]: Found primary_key collision in table Designator value: 66 max value in memory 1816\n", - "[INFO] [1702892602.834493]: Found primary_key collision in table Designator value: 67 max value in memory 1817\n", - "[INFO] [1702892602.835905]: Found primary_key collision in table Designator value: 68 max value in memory 1818\n", - "[INFO] [1702892602.837429]: Found primary_key collision in table Designator value: 69 max value in memory 1819\n", - "[INFO] [1702892602.838867]: Found primary_key collision in table Designator value: 70 max value in memory 1820\n", - "[INFO] [1702892602.840287]: Found primary_key collision in table Designator value: 71 max value in memory 1821\n", - "[INFO] [1702892602.841685]: Found primary_key collision in table Designator value: 72 max value in memory 1822\n", - "[INFO] [1702892602.843127]: Found primary_key collision in table Designator value: 73 max value in memory 1823\n", - "[INFO] [1702892602.844594]: Found primary_key collision in table Designator value: 74 max value in memory 1824\n", - "[INFO] [1702892602.846061]: Found primary_key collision in table Designator value: 75 max value in memory 1825\n", - "[INFO] [1702892602.847513]: Found primary_key collision in table Designator value: 76 max value in memory 1826\n", - "[INFO] [1702892602.850707]: Found primary_key collision in table Designator value: 1 max value in memory 1827\n", - "[INFO] [1702892602.852139]: Found primary_key collision in table Designator value: 2 max value in memory 1828\n", - "[INFO] [1702892602.853622]: Found primary_key collision in table Designator value: 3 max value in memory 1829\n", - "[INFO] [1702892602.855110]: Found primary_key collision in table Designator value: 4 max value in memory 1830\n", - "[INFO] [1702892602.856547]: Found primary_key collision in table Designator value: 5 max value in memory 1831\n", - "[INFO] [1702892602.858030]: Found primary_key collision in table Designator value: 6 max value in memory 1832\n", - "[INFO] [1702892602.859488]: Found primary_key collision in table Designator value: 7 max value in memory 1833\n", - "[INFO] [1702892602.860874]: Found primary_key collision in table Designator value: 8 max value in memory 1834\n", - "[INFO] [1702892602.862757]: Found primary_key collision in table Designator value: 9 max value in memory 1835\n", - "[INFO] [1702892602.864513]: Found primary_key collision in table Designator value: 10 max value in memory 1836\n", - "[INFO] [1702892602.866479]: Found primary_key collision in table Designator value: 11 max value in memory 1837\n", - "[INFO] [1702892602.868268]: Found primary_key collision in table Designator value: 12 max value in memory 1838\n", - "[INFO] [1702892602.870108]: Found primary_key collision in table Designator value: 13 max value in memory 1839\n", - "[INFO] [1702892602.871823]: Found primary_key collision in table Designator value: 14 max value in memory 1840\n", - "[INFO] [1702892602.873328]: Found primary_key collision in table Designator value: 15 max value in memory 1841\n", - "[INFO] [1702892602.874770]: Found primary_key collision in table Designator value: 16 max value in memory 1842\n", - "[INFO] [1702892602.876346]: Found primary_key collision in table Designator value: 17 max value in memory 1843\n", - "[INFO] [1702892602.877837]: Found primary_key collision in table Designator value: 18 max value in memory 1844\n", - "[INFO] [1702892602.879385]: Found primary_key collision in table Designator value: 19 max value in memory 1845\n", - "[INFO] [1702892602.880850]: Found primary_key collision in table Designator value: 20 max value in memory 1846\n", - "[INFO] [1702892602.882346]: Found primary_key collision in table Designator value: 21 max value in memory 1847\n", - "[INFO] [1702892602.883798]: Found primary_key collision in table Designator value: 22 max value in memory 1848\n", - "[INFO] [1702892602.885363]: Found primary_key collision in table Designator value: 23 max value in memory 1849\n", - "[INFO] [1702892602.887106]: Found primary_key collision in table Designator value: 24 max value in memory 1850\n", - "[INFO] [1702892602.888511]: Found primary_key collision in table Designator value: 25 max value in memory 1851\n", - "[INFO] [1702892602.889905]: Found primary_key collision in table Designator value: 26 max value in memory 1852\n", - "[INFO] [1702892602.891312]: Found primary_key collision in table Designator value: 27 max value in memory 1853\n", - "[INFO] [1702892602.892689]: Found primary_key collision in table Designator value: 28 max value in memory 1854\n", - "[INFO] [1702892602.894114]: Found primary_key collision in table Designator value: 29 max value in memory 1855\n", - "[INFO] [1702892602.895591]: Found primary_key collision in table Designator value: 30 max value in memory 1856\n", - "[INFO] [1702892602.897142]: Found primary_key collision in table Designator value: 31 max value in memory 1857\n", - "[INFO] [1702892602.898669]: Found primary_key collision in table Designator value: 32 max value in memory 1858\n", - "[INFO] [1702892602.900318]: Found primary_key collision in table Designator value: 77 max value in memory 1859\n", - "[INFO] [1702892602.901830]: Found primary_key collision in table Designator value: 78 max value in memory 1860\n", - "[INFO] [1702892602.903264]: Found primary_key collision in table Designator value: 79 max value in memory 1861\n", - "[INFO] [1702892602.904744]: Found primary_key collision in table Designator value: 80 max value in memory 1862\n", - "[INFO] [1702892602.906155]: Found primary_key collision in table Designator value: 81 max value in memory 1863\n", - "[INFO] [1702892602.907552]: Found primary_key collision in table Designator value: 82 max value in memory 1864\n", - "[INFO] [1702892602.908941]: Found primary_key collision in table Designator value: 83 max value in memory 1865\n", - "[INFO] [1702892602.910434]: Found primary_key collision in table Designator value: 84 max value in memory 1866\n", - "[INFO] [1702892602.911899]: Found primary_key collision in table Designator value: 85 max value in memory 1867\n", - "[INFO] [1702892602.913298]: Found primary_key collision in table Designator value: 86 max value in memory 1868\n", - "[INFO] [1702892602.914992]: Found primary_key collision in table Designator value: 87 max value in memory 1869\n", - "[INFO] [1702892602.916401]: Found primary_key collision in table Designator value: 88 max value in memory 1870\n", - "[INFO] [1702892602.917870]: Found primary_key collision in table Designator value: 89 max value in memory 1871\n", - "[INFO] [1702892602.919381]: Found primary_key collision in table Designator value: 90 max value in memory 1872\n", - "[INFO] [1702892602.921065]: Found primary_key collision in table Designator value: 91 max value in memory 1873\n", - "[INFO] [1702892602.922636]: Found primary_key collision in table Designator value: 92 max value in memory 1874\n", - "[INFO] [1702892602.924238]: Found primary_key collision in table Designator value: 93 max value in memory 1875\n", - "[INFO] [1702892602.925762]: Found primary_key collision in table Designator value: 94 max value in memory 1876\n", - "[INFO] [1702892602.927520]: Found primary_key collision in table Designator value: 95 max value in memory 1877\n", - "[INFO] [1702892602.929447]: Found primary_key collision in table Designator value: 96 max value in memory 1878\n", - "[INFO] [1702892602.931161]: Found primary_key collision in table Designator value: 97 max value in memory 1879\n", - "[INFO] [1702892602.932722]: Found primary_key collision in table Designator value: 98 max value in memory 1880\n", - "[INFO] [1702892602.934133]: Found primary_key collision in table Designator value: 99 max value in memory 1881\n", - "[INFO] [1702892602.935528]: Found primary_key collision in table Designator value: 100 max value in memory 1882\n", - "[INFO] [1702892602.936979]: Found primary_key collision in table Designator value: 101 max value in memory 1883\n", - "[INFO] [1702892602.938474]: Found primary_key collision in table Designator value: 102 max value in memory 1884\n", - "[INFO] [1702892602.940143]: Found primary_key collision in table Designator value: 103 max value in memory 1885\n", - "[INFO] [1702892602.941797]: Found primary_key collision in table Designator value: 104 max value in memory 1886\n", - "[INFO] [1702892602.943671]: Found primary_key collision in table Designator value: 105 max value in memory 1887\n", - "[INFO] [1702892602.945402]: Found primary_key collision in table Designator value: 106 max value in memory 1888\n", - "[INFO] [1702892602.946870]: Found primary_key collision in table Designator value: 107 max value in memory 1889\n", - "[INFO] [1702892602.948325]: Found primary_key collision in table Designator value: 108 max value in memory 1890\n", - "[INFO] [1702892602.968989]: Found primary_key collision in table Position value: 1 max value in memory 1981\n", - "[INFO] [1702892602.971376]: Found primary_key collision in table Position value: 2 max value in memory 1982\n", - "[INFO] [1702892602.972558]: Found primary_key collision in table Position value: 3 max value in memory 1983\n", - "[INFO] [1702892602.973688]: Found primary_key collision in table Position value: 4 max value in memory 1984\n", - "[INFO] [1702892602.974842]: Found primary_key collision in table Position value: 5 max value in memory 1985\n", - "[INFO] [1702892602.976032]: Found primary_key collision in table Position value: 6 max value in memory 1986\n", - "[INFO] [1702892602.977266]: Found primary_key collision in table Position value: 7 max value in memory 1987\n", - "[INFO] [1702892602.978436]: Found primary_key collision in table Position value: 8 max value in memory 1988\n", - "[INFO] [1702892602.979561]: Found primary_key collision in table Position value: 9 max value in memory 1989\n", - "[INFO] [1702892602.980758]: Found primary_key collision in table Position value: 10 max value in memory 1990\n", - "[INFO] [1702892602.981946]: Found primary_key collision in table Position value: 11 max value in memory 1991\n", - "[INFO] [1702892602.983154]: Found primary_key collision in table Position value: 12 max value in memory 1992\n", - "[INFO] [1702892602.984346]: Found primary_key collision in table Position value: 13 max value in memory 1993\n", - "[INFO] [1702892602.985530]: Found primary_key collision in table Position value: 14 max value in memory 1994\n", - "[INFO] [1702892602.986732]: Found primary_key collision in table Position value: 15 max value in memory 1995\n", - "[INFO] [1702892602.987936]: Found primary_key collision in table Position value: 16 max value in memory 1996\n", - "[INFO] [1702892602.989107]: Found primary_key collision in table Position value: 17 max value in memory 1997\n", - "[INFO] [1702892602.990309]: Found primary_key collision in table Position value: 18 max value in memory 1998\n", - "[INFO] [1702892602.991485]: Found primary_key collision in table Position value: 19 max value in memory 1999\n", - "[INFO] [1702892602.992661]: Found primary_key collision in table Position value: 20 max value in memory 2000\n", - "[INFO] [1702892602.993834]: Found primary_key collision in table Position value: 21 max value in memory 2001\n", - "[INFO] [1702892602.995061]: Found primary_key collision in table Position value: 22 max value in memory 2002\n", - "[INFO] [1702892602.996263]: Found primary_key collision in table Position value: 23 max value in memory 2003\n", - "[INFO] [1702892602.997467]: Found primary_key collision in table Position value: 24 max value in memory 2004\n", - "[INFO] [1702892602.998695]: Found primary_key collision in table Position value: 25 max value in memory 2005\n", - "[INFO] [1702892602.999890]: Found primary_key collision in table Position value: 26 max value in memory 2006\n", - "[INFO] [1702892603.001071]: Found primary_key collision in table Position value: 27 max value in memory 2007\n", - "[INFO] [1702892603.002261]: Found primary_key collision in table Position value: 28 max value in memory 2008\n", - "[INFO] [1702892603.003448]: Found primary_key collision in table Position value: 29 max value in memory 2009\n", - "[INFO] [1702892603.004639]: Found primary_key collision in table Position value: 30 max value in memory 2010\n", - "[INFO] [1702892603.006012]: Found primary_key collision in table Position value: 31 max value in memory 2011\n", - "[INFO] [1702892603.007222]: Found primary_key collision in table Position value: 32 max value in memory 2012\n", - "[INFO] [1702892603.008438]: Found primary_key collision in table Position value: 33 max value in memory 2013\n", - "[INFO] [1702892603.009650]: Found primary_key collision in table Position value: 34 max value in memory 2014\n", - "[INFO] [1702892603.010865]: Found primary_key collision in table Position value: 35 max value in memory 2015\n", - "[INFO] [1702892603.012053]: Found primary_key collision in table Position value: 36 max value in memory 2016\n", - "[INFO] [1702892603.013246]: Found primary_key collision in table Position value: 37 max value in memory 2017\n", - "[INFO] [1702892603.014440]: Found primary_key collision in table Position value: 38 max value in memory 2018\n", - "[INFO] [1702892603.015620]: Found primary_key collision in table Position value: 39 max value in memory 2019\n", - "[INFO] [1702892603.016814]: Found primary_key collision in table Position value: 40 max value in memory 2020\n", - "[INFO] [1702892603.018041]: Found primary_key collision in table Position value: 41 max value in memory 2021\n", - "[INFO] [1702892603.019246]: Found primary_key collision in table Position value: 42 max value in memory 2022\n", - "[INFO] [1702892603.020435]: Found primary_key collision in table Position value: 43 max value in memory 2023\n", - "[INFO] [1702892603.021609]: Found primary_key collision in table Position value: 44 max value in memory 2024\n", - "[INFO] [1702892603.022796]: Found primary_key collision in table Position value: 45 max value in memory 2025\n", - "[INFO] [1702892603.023991]: Found primary_key collision in table Position value: 46 max value in memory 2026\n", - "[INFO] [1702892603.025164]: Found primary_key collision in table Position value: 47 max value in memory 2027\n", - "[INFO] [1702892603.026356]: Found primary_key collision in table Position value: 48 max value in memory 2028\n", - "[INFO] [1702892603.027558]: Found primary_key collision in table Position value: 49 max value in memory 2029\n", - "[INFO] [1702892603.028739]: Found primary_key collision in table Position value: 50 max value in memory 2030\n", - "[INFO] [1702892603.029932]: Found primary_key collision in table Position value: 51 max value in memory 2031\n", - "[INFO] [1702892603.031156]: Found primary_key collision in table Position value: 52 max value in memory 2032\n", - "[INFO] [1702892603.032349]: Found primary_key collision in table Position value: 53 max value in memory 2033\n", - "[INFO] [1702892603.033664]: Found primary_key collision in table Position value: 54 max value in memory 2034\n", - "[INFO] [1702892603.034906]: Found primary_key collision in table Position value: 55 max value in memory 2035\n", - "[INFO] [1702892603.036128]: Found primary_key collision in table Position value: 56 max value in memory 2036\n", - "[INFO] [1702892603.037378]: Found primary_key collision in table Position value: 57 max value in memory 2037\n", - "[INFO] [1702892603.038642]: Found primary_key collision in table Position value: 58 max value in memory 2038\n", - "[INFO] [1702892603.039867]: Found primary_key collision in table Position value: 59 max value in memory 2039\n", - "[INFO] [1702892603.041082]: Found primary_key collision in table Position value: 60 max value in memory 2040\n", - "[INFO] [1702892603.042312]: Found primary_key collision in table Position value: 61 max value in memory 2041\n", - "[INFO] [1702892603.043523]: Found primary_key collision in table Position value: 62 max value in memory 2042\n", - "[INFO] [1702892603.044912]: Found primary_key collision in table Position value: 63 max value in memory 2043\n", - "[INFO] [1702892603.046140]: Found primary_key collision in table Position value: 64 max value in memory 2044\n", - "[INFO] [1702892603.047355]: Found primary_key collision in table Position value: 65 max value in memory 2045\n", - "[INFO] [1702892603.048564]: Found primary_key collision in table Position value: 66 max value in memory 2046\n", - "[INFO] [1702892603.049772]: Found primary_key collision in table Position value: 67 max value in memory 2047\n", - "[INFO] [1702892603.051012]: Found primary_key collision in table Position value: 68 max value in memory 2048\n", - "[INFO] [1702892603.052238]: Found primary_key collision in table Position value: 69 max value in memory 2049\n", - "[INFO] [1702892603.053459]: Found primary_key collision in table Position value: 70 max value in memory 2050\n", - "[INFO] [1702892603.054697]: Found primary_key collision in table Position value: 71 max value in memory 2051\n", - "[INFO] [1702892603.055918]: Found primary_key collision in table Position value: 72 max value in memory 2052\n", - "[INFO] [1702892603.057129]: Found primary_key collision in table Position value: 73 max value in memory 2053\n", - "[INFO] [1702892603.058409]: Found primary_key collision in table Position value: 74 max value in memory 2054\n", - "[INFO] [1702892603.059661]: Found primary_key collision in table Position value: 75 max value in memory 2055\n", - "[INFO] [1702892603.060892]: Found primary_key collision in table Position value: 76 max value in memory 2056\n", - "[INFO] [1702892603.062152]: Found primary_key collision in table Position value: 77 max value in memory 2057\n", - "[INFO] [1702892603.063383]: Found primary_key collision in table Position value: 78 max value in memory 2058\n", - "[INFO] [1702892603.064609]: Found primary_key collision in table Position value: 79 max value in memory 2059\n", - "[INFO] [1702892603.065830]: Found primary_key collision in table Position value: 80 max value in memory 2060\n", - "[INFO] [1702892603.067071]: Found primary_key collision in table Position value: 81 max value in memory 2061\n", - "[INFO] [1702892603.068273]: Found primary_key collision in table Position value: 82 max value in memory 2062\n", - "[INFO] [1702892603.069502]: Found primary_key collision in table Position value: 83 max value in memory 2063\n", - "[INFO] [1702892603.070774]: Found primary_key collision in table Position value: 84 max value in memory 2064\n", - "[INFO] [1702892603.072017]: Found primary_key collision in table Position value: 85 max value in memory 2065\n", - "[INFO] [1702892603.073240]: Found primary_key collision in table Position value: 86 max value in memory 2066\n", - "[INFO] [1702892603.074454]: Found primary_key collision in table Position value: 87 max value in memory 2067\n", - "[INFO] [1702892603.075652]: Found primary_key collision in table Position value: 88 max value in memory 2068\n", - "[INFO] [1702892603.076847]: Found primary_key collision in table Position value: 89 max value in memory 2069\n", - "[INFO] [1702892603.078099]: Found primary_key collision in table Position value: 90 max value in memory 2070\n", - "[INFO] [1702892603.079364]: Found primary_key collision in table Position value: 91 max value in memory 2071\n", - "[INFO] [1702892603.080606]: Found primary_key collision in table Position value: 92 max value in memory 2072\n", - "[INFO] [1702892603.081819]: Found primary_key collision in table Position value: 93 max value in memory 2073\n", - "[INFO] [1702892603.083038]: Found primary_key collision in table Position value: 94 max value in memory 2074\n", - "[INFO] [1702892603.084247]: Found primary_key collision in table Position value: 95 max value in memory 2075\n", - "[INFO] [1702892603.085624]: Found primary_key collision in table Position value: 96 max value in memory 2076\n", - "[INFO] [1702892603.087357]: Found primary_key collision in table Position value: 97 max value in memory 2077\n", - "[INFO] [1702892603.088695]: Found primary_key collision in table Position value: 98 max value in memory 2078\n", - "[INFO] [1702892603.089992]: Found primary_key collision in table Position value: 99 max value in memory 2079\n", - "[INFO] [1702892603.091232]: Found primary_key collision in table Position value: 100 max value in memory 2080\n", - "[INFO] [1702892603.092432]: Found primary_key collision in table Position value: 101 max value in memory 2081\n", - "[INFO] [1702892603.093640]: Found primary_key collision in table Position value: 102 max value in memory 2082\n", - "[INFO] [1702892603.094877]: Found primary_key collision in table Position value: 103 max value in memory 2083\n", - "[INFO] [1702892603.096129]: Found primary_key collision in table Position value: 104 max value in memory 2084\n", - "[INFO] [1702892603.097354]: Found primary_key collision in table Position value: 105 max value in memory 2085\n", - "[INFO] [1702892603.098636]: Found primary_key collision in table Position value: 106 max value in memory 2086\n", - "[INFO] [1702892603.099860]: Found primary_key collision in table Position value: 107 max value in memory 2087\n", - "[INFO] [1702892603.101085]: Found primary_key collision in table Position value: 108 max value in memory 2088\n", - "[INFO] [1702892603.102339]: Found primary_key collision in table Position value: 109 max value in memory 2089\n", - "[INFO] [1702892603.103665]: Found primary_key collision in table Position value: 110 max value in memory 2090\n", - "[INFO] [1702892603.104935]: Found primary_key collision in table Position value: 111 max value in memory 2091\n", - "[INFO] [1702892603.106207]: Found primary_key collision in table Position value: 112 max value in memory 2092\n", - "[INFO] [1702892603.107448]: Found primary_key collision in table Position value: 113 max value in memory 2093\n", - "[INFO] [1702892603.108678]: Found primary_key collision in table Position value: 114 max value in memory 2094\n", - "[INFO] [1702892603.109928]: Found primary_key collision in table Position value: 115 max value in memory 2095\n", - "[INFO] [1702892603.111188]: Found primary_key collision in table Position value: 116 max value in memory 2096\n", - "[INFO] [1702892603.112414]: Found primary_key collision in table Position value: 117 max value in memory 2097\n", - "[INFO] [1702892603.113676]: Found primary_key collision in table Position value: 118 max value in memory 2098\n", - "[INFO] [1702892603.115004]: Found primary_key collision in table Position value: 119 max value in memory 2099\n", - "[INFO] [1702892603.116269]: Found primary_key collision in table Position value: 120 max value in memory 2100\n", - "[INFO] [1702892603.133946]: Found primary_key collision in table Quaternion value: 71 max value in memory 1981\n", - "[INFO] [1702892603.135834]: Found primary_key collision in table Quaternion value: 72 max value in memory 1982\n", - "[INFO] [1702892603.137220]: Found primary_key collision in table Quaternion value: 73 max value in memory 1983\n", - "[INFO] [1702892603.138563]: Found primary_key collision in table Quaternion value: 74 max value in memory 1984\n", - "[INFO] [1702892603.139760]: Found primary_key collision in table Quaternion value: 75 max value in memory 1985\n", - "[INFO] [1702892603.141169]: Found primary_key collision in table Quaternion value: 76 max value in memory 1986\n", - "[INFO] [1702892603.142707]: Found primary_key collision in table Quaternion value: 77 max value in memory 1987\n", - "[INFO] [1702892603.143820]: Found primary_key collision in table Quaternion value: 78 max value in memory 1988\n", - "[INFO] [1702892603.144967]: Found primary_key collision in table Quaternion value: 79 max value in memory 1989\n", - "[INFO] [1702892603.146174]: Found primary_key collision in table Quaternion value: 80 max value in memory 1990\n", - "[INFO] [1702892603.147619]: Found primary_key collision in table Quaternion value: 81 max value in memory 1991\n", - "[INFO] [1702892603.149292]: Found primary_key collision in table Quaternion value: 82 max value in memory 1992\n", - "[INFO] [1702892603.150975]: Found primary_key collision in table Quaternion value: 83 max value in memory 1993\n", - "[INFO] [1702892603.152314]: Found primary_key collision in table Quaternion value: 84 max value in memory 1994\n", - "[INFO] [1702892603.153600]: Found primary_key collision in table Quaternion value: 85 max value in memory 1995\n", - "[INFO] [1702892603.154898]: Found primary_key collision in table Quaternion value: 86 max value in memory 1996\n", - "[INFO] [1702892603.156165]: Found primary_key collision in table Quaternion value: 87 max value in memory 1997\n", - "[INFO] [1702892603.157447]: Found primary_key collision in table Quaternion value: 88 max value in memory 1998\n", - "[INFO] [1702892603.158764]: Found primary_key collision in table Quaternion value: 89 max value in memory 1999\n", - "[INFO] [1702892603.160074]: Found primary_key collision in table Quaternion value: 90 max value in memory 2000\n", - "[INFO] [1702892603.161382]: Found primary_key collision in table Quaternion value: 91 max value in memory 2001\n", - "[INFO] [1702892603.162685]: Found primary_key collision in table Quaternion value: 92 max value in memory 2002\n", - "[INFO] [1702892603.163980]: Found primary_key collision in table Quaternion value: 93 max value in memory 2003\n", - "[INFO] [1702892603.165253]: Found primary_key collision in table Quaternion value: 94 max value in memory 2004\n", - "[INFO] [1702892603.166560]: Found primary_key collision in table Quaternion value: 95 max value in memory 2005\n", - "[INFO] [1702892603.167828]: Found primary_key collision in table Quaternion value: 96 max value in memory 2006\n", - "[INFO] [1702892603.169108]: Found primary_key collision in table Quaternion value: 97 max value in memory 2007\n", - "[INFO] [1702892603.170506]: Found primary_key collision in table Quaternion value: 98 max value in memory 2008\n", - "[INFO] [1702892603.171806]: Found primary_key collision in table Quaternion value: 99 max value in memory 2009\n", - "[INFO] [1702892603.173097]: Found primary_key collision in table Quaternion value: 100 max value in memory 2010\n", - "[INFO] [1702892603.174576]: Found primary_key collision in table Quaternion value: 101 max value in memory 2011\n", - "[INFO] [1702892603.175843]: Found primary_key collision in table Quaternion value: 102 max value in memory 2012\n", - "[INFO] [1702892603.177136]: Found primary_key collision in table Quaternion value: 103 max value in memory 2013\n", - "[INFO] [1702892603.178705]: Found primary_key collision in table Quaternion value: 104 max value in memory 2014\n", - "[INFO] [1702892603.180213]: Found primary_key collision in table Quaternion value: 105 max value in memory 2015\n", - "[INFO] [1702892603.181674]: Found primary_key collision in table Quaternion value: 106 max value in memory 2016\n", - "[INFO] [1702892603.183128]: Found primary_key collision in table Quaternion value: 107 max value in memory 2017\n", - "[INFO] [1702892603.184573]: Found primary_key collision in table Quaternion value: 108 max value in memory 2018\n", - "[INFO] [1702892603.186020]: Found primary_key collision in table Quaternion value: 109 max value in memory 2019\n", - "[INFO] [1702892603.187475]: Found primary_key collision in table Quaternion value: 110 max value in memory 2020\n", - "[INFO] [1702892603.188951]: Found primary_key collision in table Quaternion value: 111 max value in memory 2021\n", - "[INFO] [1702892603.190296]: Found primary_key collision in table Quaternion value: 112 max value in memory 2022\n", - "[INFO] [1702892603.191602]: Found primary_key collision in table Quaternion value: 113 max value in memory 2023\n", - "[INFO] [1702892603.192894]: Found primary_key collision in table Quaternion value: 114 max value in memory 2024\n", - "[INFO] [1702892603.194216]: Found primary_key collision in table Quaternion value: 115 max value in memory 2025\n", - "[INFO] [1702892603.195529]: Found primary_key collision in table Quaternion value: 116 max value in memory 2026\n", - "[INFO] [1702892603.196820]: Found primary_key collision in table Quaternion value: 117 max value in memory 2027\n", - "[INFO] [1702892603.198148]: Found primary_key collision in table Quaternion value: 118 max value in memory 2028\n", - "[INFO] [1702892603.199485]: Found primary_key collision in table Quaternion value: 119 max value in memory 2029\n", - "[INFO] [1702892603.200816]: Found primary_key collision in table Quaternion value: 120 max value in memory 2030\n", - "[INFO] [1702892603.202152]: Found primary_key collision in table Quaternion value: 1 max value in memory 2031\n", - "[INFO] [1702892603.203781]: Found primary_key collision in table Quaternion value: 2 max value in memory 2032\n", - "[INFO] [1702892603.205339]: Found primary_key collision in table Quaternion value: 3 max value in memory 2033\n", - "[INFO] [1702892603.206814]: Found primary_key collision in table Quaternion value: 4 max value in memory 2034\n", - "[INFO] [1702892603.208412]: Found primary_key collision in table Quaternion value: 5 max value in memory 2035\n", - "[INFO] [1702892603.209978]: Found primary_key collision in table Quaternion value: 6 max value in memory 2036\n", - "[INFO] [1702892603.211422]: Found primary_key collision in table Quaternion value: 7 max value in memory 2037\n", - "[INFO] [1702892603.212681]: Found primary_key collision in table Quaternion value: 8 max value in memory 2038\n", - "[INFO] [1702892603.213949]: Found primary_key collision in table Quaternion value: 9 max value in memory 2039\n", - "[INFO] [1702892603.215207]: Found primary_key collision in table Quaternion value: 10 max value in memory 2040\n", - "[INFO] [1702892603.216486]: Found primary_key collision in table Quaternion value: 11 max value in memory 2041\n", - "[INFO] [1702892603.217768]: Found primary_key collision in table Quaternion value: 12 max value in memory 2042\n", - "[INFO] [1702892603.219254]: Found primary_key collision in table Quaternion value: 13 max value in memory 2043\n", - "[INFO] [1702892603.220511]: Found primary_key collision in table Quaternion value: 14 max value in memory 2044\n", - "[INFO] [1702892603.221764]: Found primary_key collision in table Quaternion value: 15 max value in memory 2045\n", - "[INFO] [1702892603.223042]: Found primary_key collision in table Quaternion value: 16 max value in memory 2046\n", - "[INFO] [1702892603.224300]: Found primary_key collision in table Quaternion value: 17 max value in memory 2047\n", - "[INFO] [1702892603.225558]: Found primary_key collision in table Quaternion value: 18 max value in memory 2048\n", - "[INFO] [1702892603.226838]: Found primary_key collision in table Quaternion value: 19 max value in memory 2049\n", - "[INFO] [1702892603.228220]: Found primary_key collision in table Quaternion value: 20 max value in memory 2050\n", - "[INFO] [1702892603.229491]: Found primary_key collision in table Quaternion value: 21 max value in memory 2051\n", - "[INFO] [1702892603.230775]: Found primary_key collision in table Quaternion value: 22 max value in memory 2052\n", - "[INFO] [1702892603.232075]: Found primary_key collision in table Quaternion value: 23 max value in memory 2053\n", - "[INFO] [1702892603.233355]: Found primary_key collision in table Quaternion value: 24 max value in memory 2054\n", - "[INFO] [1702892603.234649]: Found primary_key collision in table Quaternion value: 25 max value in memory 2055\n", - "[INFO] [1702892603.235938]: Found primary_key collision in table Quaternion value: 26 max value in memory 2056\n", - "[INFO] [1702892603.237303]: Found primary_key collision in table Quaternion value: 27 max value in memory 2057\n", - "[INFO] [1702892603.238831]: Found primary_key collision in table Quaternion value: 28 max value in memory 2058\n", - "[INFO] [1702892603.240481]: Found primary_key collision in table Quaternion value: 29 max value in memory 2059\n", - "[INFO] [1702892603.242058]: Found primary_key collision in table Quaternion value: 30 max value in memory 2060\n", - "[INFO] [1702892603.243625]: Found primary_key collision in table Quaternion value: 31 max value in memory 2061\n", - "[INFO] [1702892603.245184]: Found primary_key collision in table Quaternion value: 32 max value in memory 2062\n", - "[INFO] [1702892603.246766]: Found primary_key collision in table Quaternion value: 33 max value in memory 2063\n", - "[INFO] [1702892603.248189]: Found primary_key collision in table Quaternion value: 34 max value in memory 2064\n", - "[INFO] [1702892603.249468]: Found primary_key collision in table Quaternion value: 35 max value in memory 2065\n", - "[INFO] [1702892603.250755]: Found primary_key collision in table Quaternion value: 36 max value in memory 2066\n", - "[INFO] [1702892603.252023]: Found primary_key collision in table Quaternion value: 37 max value in memory 2067\n", - "[INFO] [1702892603.253334]: Found primary_key collision in table Quaternion value: 38 max value in memory 2068\n", - "[INFO] [1702892603.254720]: Found primary_key collision in table Quaternion value: 39 max value in memory 2069\n", - "[INFO] [1702892603.256061]: Found primary_key collision in table Quaternion value: 40 max value in memory 2070\n", - "[INFO] [1702892603.257325]: Found primary_key collision in table Quaternion value: 41 max value in memory 2071\n", - "[INFO] [1702892603.259198]: Found primary_key collision in table Quaternion value: 42 max value in memory 2072\n", - "[INFO] [1702892603.260834]: Found primary_key collision in table Quaternion value: 43 max value in memory 2073\n", - "[INFO] [1702892603.262432]: Found primary_key collision in table Quaternion value: 44 max value in memory 2074\n", - "[INFO] [1702892603.264184]: Found primary_key collision in table Quaternion value: 45 max value in memory 2075\n", - "[INFO] [1702892603.265850]: Found primary_key collision in table Quaternion value: 46 max value in memory 2076\n", - "[INFO] [1702892603.267315]: Found primary_key collision in table Quaternion value: 47 max value in memory 2077\n", - "[INFO] [1702892603.268764]: Found primary_key collision in table Quaternion value: 48 max value in memory 2078\n", - "[INFO] [1702892603.270478]: Found primary_key collision in table Quaternion value: 49 max value in memory 2079\n", - "[INFO] [1702892603.272224]: Found primary_key collision in table Quaternion value: 50 max value in memory 2080\n", - "[INFO] [1702892603.273879]: Found primary_key collision in table Quaternion value: 51 max value in memory 2081\n", - "[INFO] [1702892603.275595]: Found primary_key collision in table Quaternion value: 52 max value in memory 2082\n", - "[INFO] [1702892603.277122]: Found primary_key collision in table Quaternion value: 53 max value in memory 2083\n", - "[INFO] [1702892603.278702]: Found primary_key collision in table Quaternion value: 54 max value in memory 2084\n", - "[INFO] [1702892603.279891]: Found primary_key collision in table Quaternion value: 55 max value in memory 2085\n", - "[INFO] [1702892603.280981]: Found primary_key collision in table Quaternion value: 56 max value in memory 2086\n", - "[INFO] [1702892603.282229]: Found primary_key collision in table Quaternion value: 57 max value in memory 2087\n", - "[INFO] [1702892603.283215]: Found primary_key collision in table Quaternion value: 58 max value in memory 2088\n", - "[INFO] [1702892603.284144]: Found primary_key collision in table Quaternion value: 59 max value in memory 2089\n", - "[INFO] [1702892603.285058]: Found primary_key collision in table Quaternion value: 60 max value in memory 2090\n", - "[INFO] [1702892603.285961]: Found primary_key collision in table Quaternion value: 61 max value in memory 2091\n", - "[INFO] [1702892603.286888]: Found primary_key collision in table Quaternion value: 62 max value in memory 2092\n", - "[INFO] [1702892603.288143]: Found primary_key collision in table Quaternion value: 63 max value in memory 2093\n", - "[INFO] [1702892603.289739]: Found primary_key collision in table Quaternion value: 64 max value in memory 2094\n", - "[INFO] [1702892603.291179]: Found primary_key collision in table Quaternion value: 65 max value in memory 2095\n", - "[INFO] [1702892603.292538]: Found primary_key collision in table Quaternion value: 66 max value in memory 2096\n", - "[INFO] [1702892603.293938]: Found primary_key collision in table Quaternion value: 67 max value in memory 2097\n", - "[INFO] [1702892603.295309]: Found primary_key collision in table Quaternion value: 68 max value in memory 2098\n", - "[INFO] [1702892603.296661]: Found primary_key collision in table Quaternion value: 69 max value in memory 2099\n", - "[INFO] [1702892603.298049]: Found primary_key collision in table Quaternion value: 70 max value in memory 2100\n", - "[INFO] [1702892603.309661]: Found primary_key collision in table Code value: 1 max value in memory 1931\n", - "[INFO] [1702892603.311598]: Found primary_key collision in table Code value: 2 max value in memory 1932\n", - "[INFO] [1702892603.312976]: Found primary_key collision in table Code value: 21 max value in memory 1933\n", - "[INFO] [1702892603.313962]: Found primary_key collision in table Code value: 22 max value in memory 1934\n", - "[INFO] [1702892603.315264]: Found primary_key collision in table Code value: 41 max value in memory 1935\n", - "[INFO] [1702892603.317141]: Found primary_key collision in table Code value: 60 max value in memory 1936\n", - "[INFO] [1702892603.318267]: Found primary_key collision in table Code value: 61 max value in memory 1937\n", - "[INFO] [1702892603.319729]: Found primary_key collision in table Code value: 80 max value in memory 1938\n", - "[INFO] [1702892603.320802]: Found primary_key collision in table Code value: 37 max value in memory 1939\n", - "[INFO] [1702892603.322284]: Found primary_key collision in table Code value: 38 max value in memory 1940\n", - "[INFO] [1702892603.323800]: Found primary_key collision in table Code value: 39 max value in memory 1941\n", - "[INFO] [1702892603.325209]: Found primary_key collision in table Code value: 40 max value in memory 1942\n", - "[INFO] [1702892603.326547]: Found primary_key collision in table Code value: 42 max value in memory 1943\n", - "[INFO] [1702892603.327876]: Found primary_key collision in table Code value: 43 max value in memory 1944\n", - "[INFO] [1702892603.329239]: Found primary_key collision in table Code value: 44 max value in memory 1945\n", - "[INFO] [1702892603.330616]: Found primary_key collision in table Code value: 45 max value in memory 1946\n", - "[INFO] [1702892603.331951]: Found primary_key collision in table Code value: 46 max value in memory 1947\n", - "[INFO] [1702892603.333293]: Found primary_key collision in table Code value: 47 max value in memory 1948\n", - "[INFO] [1702892603.334583]: Found primary_key collision in table Code value: 48 max value in memory 1949\n", - "[INFO] [1702892603.335855]: Found primary_key collision in table Code value: 49 max value in memory 1950\n", - "[INFO] [1702892603.337099]: Found primary_key collision in table Code value: 50 max value in memory 1951\n", - "[INFO] [1702892603.338431]: Found primary_key collision in table Code value: 51 max value in memory 1952\n", - "[INFO] [1702892603.339805]: Found primary_key collision in table Code value: 52 max value in memory 1953\n", - "[INFO] [1702892603.341031]: Found primary_key collision in table Code value: 53 max value in memory 1954\n", - "[INFO] [1702892603.342239]: Found primary_key collision in table Code value: 54 max value in memory 1955\n", - "[INFO] [1702892603.343444]: Found primary_key collision in table Code value: 55 max value in memory 1956\n", - "[INFO] [1702892603.344672]: Found primary_key collision in table Code value: 56 max value in memory 1957\n", - "[INFO] [1702892603.345869]: Found primary_key collision in table Code value: 57 max value in memory 1958\n", - "[INFO] [1702892603.347080]: Found primary_key collision in table Code value: 58 max value in memory 1959\n", - "[INFO] [1702892603.348641]: Found primary_key collision in table Code value: 59 max value in memory 1960\n", - "[INFO] [1702892603.349972]: Found primary_key collision in table Code value: 62 max value in memory 1961\n", - "[INFO] [1702892603.351282]: Found primary_key collision in table Code value: 63 max value in memory 1962\n", - "[INFO] [1702892603.352551]: Found primary_key collision in table Code value: 64 max value in memory 1963\n", - "[INFO] [1702892603.353813]: Found primary_key collision in table Code value: 65 max value in memory 1964\n", - "[INFO] [1702892603.355128]: Found primary_key collision in table Code value: 66 max value in memory 1965\n", - "[INFO] [1702892603.356396]: Found primary_key collision in table Code value: 67 max value in memory 1966\n", - "[INFO] [1702892603.357593]: Found primary_key collision in table Code value: 68 max value in memory 1967\n", - "[INFO] [1702892603.358832]: Found primary_key collision in table Code value: 69 max value in memory 1968\n", - "[INFO] [1702892603.360040]: Found primary_key collision in table Code value: 70 max value in memory 1969\n", - "[INFO] [1702892603.361229]: Found primary_key collision in table Code value: 71 max value in memory 1970\n", - "[INFO] [1702892603.362471]: Found primary_key collision in table Code value: 72 max value in memory 1971\n", - "[INFO] [1702892603.363670]: Found primary_key collision in table Code value: 73 max value in memory 1972\n", - "[INFO] [1702892603.364843]: Found primary_key collision in table Code value: 74 max value in memory 1973\n", - "[INFO] [1702892603.366090]: Found primary_key collision in table Code value: 75 max value in memory 1974\n", - "[INFO] [1702892603.367358]: Found primary_key collision in table Code value: 76 max value in memory 1975\n", - "[INFO] [1702892603.368599]: Found primary_key collision in table Code value: 77 max value in memory 1976\n", - "[INFO] [1702892603.369907]: Found primary_key collision in table Code value: 78 max value in memory 1977\n", - "[INFO] [1702892603.371215]: Found primary_key collision in table Code value: 79 max value in memory 1978\n", - "[INFO] [1702892603.372450]: Found primary_key collision in table Code value: 3 max value in memory 1979\n", - "[INFO] [1702892603.373694]: Found primary_key collision in table Code value: 4 max value in memory 1980\n", - "[INFO] [1702892603.375033]: Found primary_key collision in table Code value: 5 max value in memory 1981\n", - "[INFO] [1702892603.376266]: Found primary_key collision in table Code value: 6 max value in memory 1982\n", - "[INFO] [1702892603.377444]: Found primary_key collision in table Code value: 7 max value in memory 1983\n", - "[INFO] [1702892603.378664]: Found primary_key collision in table Code value: 8 max value in memory 1984\n", - "[INFO] [1702892603.379902]: Found primary_key collision in table Code value: 9 max value in memory 1985\n", - "[INFO] [1702892603.381109]: Found primary_key collision in table Code value: 10 max value in memory 1986\n", - "[INFO] [1702892603.382324]: Found primary_key collision in table Code value: 11 max value in memory 1987\n", - "[INFO] [1702892603.383605]: Found primary_key collision in table Code value: 12 max value in memory 1988\n", - "[INFO] [1702892603.384784]: Found primary_key collision in table Code value: 13 max value in memory 1989\n", - "[INFO] [1702892603.385957]: Found primary_key collision in table Code value: 14 max value in memory 1990\n", - "[INFO] [1702892603.387163]: Found primary_key collision in table Code value: 15 max value in memory 1991\n", - "[INFO] [1702892603.388354]: Found primary_key collision in table Code value: 16 max value in memory 1992\n", - "[INFO] [1702892603.389693]: Found primary_key collision in table Code value: 17 max value in memory 1993\n", - "[INFO] [1702892603.390876]: Found primary_key collision in table Code value: 18 max value in memory 1994\n", - "[INFO] [1702892603.392334]: Found primary_key collision in table Code value: 19 max value in memory 1995\n", - "[INFO] [1702892603.393522]: Found primary_key collision in table Code value: 20 max value in memory 1996\n", - "[INFO] [1702892603.394705]: Found primary_key collision in table Code value: 23 max value in memory 1997\n", - "[INFO] [1702892603.395918]: Found primary_key collision in table Code value: 24 max value in memory 1998\n", - "[INFO] [1702892603.397112]: Found primary_key collision in table Code value: 25 max value in memory 1999\n", - "[INFO] [1702892603.398351]: Found primary_key collision in table Code value: 26 max value in memory 2000\n", - "[INFO] [1702892603.399600]: Found primary_key collision in table Code value: 27 max value in memory 2001\n", - "[INFO] [1702892603.400798]: Found primary_key collision in table Code value: 28 max value in memory 2002\n", - "[INFO] [1702892603.401964]: Found primary_key collision in table Code value: 29 max value in memory 2003\n", - "[INFO] [1702892603.403154]: Found primary_key collision in table Code value: 30 max value in memory 2004\n", - "[INFO] [1702892603.404330]: Found primary_key collision in table Code value: 31 max value in memory 2005\n", - "[INFO] [1702892603.405542]: Found primary_key collision in table Code value: 32 max value in memory 2006\n", - "[INFO] [1702892603.406737]: Found primary_key collision in table Code value: 33 max value in memory 2007\n", - "[INFO] [1702892603.407924]: Found primary_key collision in table Code value: 34 max value in memory 2008\n", - "[INFO] [1702892603.409169]: Found primary_key collision in table Code value: 35 max value in memory 2009\n", - "[INFO] [1702892603.410439]: Found primary_key collision in table Code value: 36 max value in memory 2010\n", - "[INFO] [1702892603.412517]: Found primary_key collision in table Code value: 99 max value in memory 2011\n", - "[INFO] [1702892603.413825]: Found primary_key collision in table Code value: 81 max value in memory 2012\n", - "[INFO] [1702892603.415109]: Found primary_key collision in table Code value: 82 max value in memory 2013\n", - "[INFO] [1702892603.416408]: Found primary_key collision in table Code value: 83 max value in memory 2014\n", - "[INFO] [1702892603.417622]: Found primary_key collision in table Code value: 84 max value in memory 2015\n", - "[INFO] [1702892603.418818]: Found primary_key collision in table Code value: 85 max value in memory 2016\n", - "[INFO] [1702892603.420139]: Found primary_key collision in table Code value: 86 max value in memory 2017\n", - "[INFO] [1702892603.421361]: Found primary_key collision in table Code value: 87 max value in memory 2018\n", - "[INFO] [1702892603.422564]: Found primary_key collision in table Code value: 88 max value in memory 2019\n", - "[INFO] [1702892603.423787]: Found primary_key collision in table Code value: 89 max value in memory 2020\n", - "[INFO] [1702892603.424972]: Found primary_key collision in table Code value: 90 max value in memory 2021\n", - "[INFO] [1702892603.426152]: Found primary_key collision in table Code value: 91 max value in memory 2022\n", - "[INFO] [1702892603.427328]: Found primary_key collision in table Code value: 92 max value in memory 2023\n", - "[INFO] [1702892603.428525]: Found primary_key collision in table Code value: 93 max value in memory 2024\n", - "[INFO] [1702892603.429749]: Found primary_key collision in table Code value: 94 max value in memory 2025\n", - "[INFO] [1702892603.431200]: Found primary_key collision in table Code value: 95 max value in memory 2026\n", - "[INFO] [1702892603.432610]: Found primary_key collision in table Code value: 96 max value in memory 2027\n", - "[INFO] [1702892603.433926]: Found primary_key collision in table Code value: 97 max value in memory 2028\n", - "[INFO] [1702892603.435200]: Found primary_key collision in table Code value: 98 max value in memory 2029\n", - "[INFO] [1702892603.436443]: Found primary_key collision in table Code value: 100 max value in memory 2030\n", - "[INFO] [1702892603.437752]: Found primary_key collision in table Code value: 101 max value in memory 2031\n", - "[INFO] [1702892603.439026]: Found primary_key collision in table Code value: 102 max value in memory 2032\n", - "[INFO] [1702892603.440278]: Found primary_key collision in table Code value: 103 max value in memory 2033\n", - "[INFO] [1702892603.441522]: Found primary_key collision in table Code value: 104 max value in memory 2034\n", - "[INFO] [1702892603.442776]: Found primary_key collision in table Code value: 105 max value in memory 2035\n", - "[INFO] [1702892603.444038]: Found primary_key collision in table Code value: 106 max value in memory 2036\n", - "[INFO] [1702892603.445333]: Found primary_key collision in table Code value: 107 max value in memory 2037\n", - "[INFO] [1702892603.446539]: Found primary_key collision in table Code value: 108 max value in memory 2038\n", - "[INFO] [1702892603.447726]: Found primary_key collision in table Code value: 109 max value in memory 2039\n", - "[INFO] [1702892603.448895]: Found primary_key collision in table Code value: 110 max value in memory 2040\n", - "[INFO] [1702892603.450078]: Found primary_key collision in table Code value: 111 max value in memory 2041\n", - "[INFO] [1702892603.451283]: Found primary_key collision in table Code value: 112 max value in memory 2042\n", - "[INFO] [1702892603.452470]: Found primary_key collision in table Code value: 113 max value in memory 2043\n", - "[INFO] [1702892603.453651]: Found primary_key collision in table Code value: 114 max value in memory 2044\n", - "[INFO] [1702892603.454867]: Found primary_key collision in table Code value: 115 max value in memory 2045\n", - "[INFO] [1702892603.456420]: Found primary_key collision in table Code value: 116 max value in memory 2046\n", - "[INFO] [1702892603.457916]: Found primary_key collision in table Code value: 117 max value in memory 2047\n", - "[INFO] [1702892603.475480]: Found primary_key collision in table Pose value: 109 max value in memory 1981\n", - "[INFO] [1702892603.477912]: Found primary_key collision in table Pose value: 110 max value in memory 1982\n", - "[INFO] [1702892603.479603]: Found primary_key collision in table Pose value: 111 max value in memory 1983\n", - "[INFO] [1702892603.481136]: Found primary_key collision in table Pose value: 112 max value in memory 1984\n", - "[INFO] [1702892603.482693]: Found primary_key collision in table Pose value: 113 max value in memory 1985\n", - "[INFO] [1702892603.484202]: Found primary_key collision in table Pose value: 114 max value in memory 1986\n", - "[INFO] [1702892603.485745]: Found primary_key collision in table Pose value: 115 max value in memory 1987\n", - "[INFO] [1702892603.487167]: Found primary_key collision in table Pose value: 116 max value in memory 1988\n", - "[INFO] [1702892603.488503]: Found primary_key collision in table Pose value: 117 max value in memory 1989\n", - "[INFO] [1702892603.490370]: Found primary_key collision in table Pose value: 118 max value in memory 1990\n", - "[INFO] [1702892603.491845]: Found primary_key collision in table Pose value: 119 max value in memory 1991\n", - "[INFO] [1702892603.493932]: Found primary_key collision in table Pose value: 120 max value in memory 1992\n", - "[INFO] [1702892603.499389]: Found primary_key collision in table Pose value: 1 max value in memory 1993\n", - "[INFO] [1702892603.500919]: Found primary_key collision in table Pose value: 2 max value in memory 1994\n", - "[INFO] [1702892603.502436]: Found primary_key collision in table Pose value: 3 max value in memory 1995\n", - "[INFO] [1702892603.503915]: Found primary_key collision in table Pose value: 4 max value in memory 1996\n", - "[INFO] [1702892603.505398]: Found primary_key collision in table Pose value: 5 max value in memory 1997\n", - "[INFO] [1702892603.506806]: Found primary_key collision in table Pose value: 6 max value in memory 1998\n", - "[INFO] [1702892603.508188]: Found primary_key collision in table Pose value: 7 max value in memory 1999\n", - "[INFO] [1702892603.509438]: Found primary_key collision in table Pose value: 8 max value in memory 2000\n", - "[INFO] [1702892603.510750]: Found primary_key collision in table Pose value: 9 max value in memory 2001\n", - "[INFO] [1702892603.512105]: Found primary_key collision in table Pose value: 10 max value in memory 2002\n", - "[INFO] [1702892603.513412]: Found primary_key collision in table Pose value: 11 max value in memory 2003\n", - "[INFO] [1702892603.514727]: Found primary_key collision in table Pose value: 12 max value in memory 2004\n", - "[INFO] [1702892603.515981]: Found primary_key collision in table Pose value: 13 max value in memory 2005\n", - "[INFO] [1702892603.517293]: Found primary_key collision in table Pose value: 14 max value in memory 2006\n", - "[INFO] [1702892603.518669]: Found primary_key collision in table Pose value: 15 max value in memory 2007\n", - "[INFO] [1702892603.520370]: Found primary_key collision in table Pose value: 16 max value in memory 2008\n", - "[INFO] [1702892603.521628]: Found primary_key collision in table Pose value: 17 max value in memory 2009\n", - "[INFO] [1702892603.522920]: Found primary_key collision in table Pose value: 18 max value in memory 2010\n", - "[INFO] [1702892603.524197]: Found primary_key collision in table Pose value: 19 max value in memory 2011\n", - "[INFO] [1702892603.525452]: Found primary_key collision in table Pose value: 20 max value in memory 2012\n", - "[INFO] [1702892603.526690]: Found primary_key collision in table Pose value: 21 max value in memory 2013\n", - "[INFO] [1702892603.527918]: Found primary_key collision in table Pose value: 22 max value in memory 2014\n", - "[INFO] [1702892603.529256]: Found primary_key collision in table Pose value: 23 max value in memory 2015\n", - "[INFO] [1702892603.530697]: Found primary_key collision in table Pose value: 24 max value in memory 2016\n", - "[INFO] [1702892603.532076]: Found primary_key collision in table Pose value: 25 max value in memory 2017\n", - "[INFO] [1702892603.533423]: Found primary_key collision in table Pose value: 26 max value in memory 2018\n", - "[INFO] [1702892603.534779]: Found primary_key collision in table Pose value: 27 max value in memory 2019\n", - "[INFO] [1702892603.536173]: Found primary_key collision in table Pose value: 28 max value in memory 2020\n", - "[INFO] [1702892603.537695]: Found primary_key collision in table Pose value: 29 max value in memory 2021\n", - "[INFO] [1702892603.539126]: Found primary_key collision in table Pose value: 30 max value in memory 2022\n", - "[INFO] [1702892603.540704]: Found primary_key collision in table Pose value: 31 max value in memory 2023\n", - "[INFO] [1702892603.542169]: Found primary_key collision in table Pose value: 32 max value in memory 2024\n", - "[INFO] [1702892603.543556]: Found primary_key collision in table Pose value: 33 max value in memory 2025\n", - "[INFO] [1702892603.545020]: Found primary_key collision in table Pose value: 34 max value in memory 2026\n", - "[INFO] [1702892603.546513]: Found primary_key collision in table Pose value: 35 max value in memory 2027\n", - "[INFO] [1702892603.547881]: Found primary_key collision in table Pose value: 36 max value in memory 2028\n", - "[INFO] [1702892603.549175]: Found primary_key collision in table Pose value: 37 max value in memory 2029\n", - "[INFO] [1702892603.550440]: Found primary_key collision in table Pose value: 38 max value in memory 2030\n", - "[INFO] [1702892603.551688]: Found primary_key collision in table Pose value: 39 max value in memory 2031\n", - "[INFO] [1702892603.552921]: Found primary_key collision in table Pose value: 40 max value in memory 2032\n", - "[INFO] [1702892603.554222]: Found primary_key collision in table Pose value: 41 max value in memory 2033\n", - "[INFO] [1702892603.555545]: Found primary_key collision in table Pose value: 42 max value in memory 2034\n", - "[INFO] [1702892603.556918]: Found primary_key collision in table Pose value: 43 max value in memory 2035\n", - "[INFO] [1702892603.558205]: Found primary_key collision in table Pose value: 44 max value in memory 2036\n", - "[INFO] [1702892603.559500]: Found primary_key collision in table Pose value: 45 max value in memory 2037\n", - "[INFO] [1702892603.560757]: Found primary_key collision in table Pose value: 46 max value in memory 2038\n", - "[INFO] [1702892603.562197]: Found primary_key collision in table Pose value: 71 max value in memory 2039\n", - "[INFO] [1702892603.563840]: Found primary_key collision in table Pose value: 72 max value in memory 2040\n", - "[INFO] [1702892603.565129]: Found primary_key collision in table Pose value: 73 max value in memory 2041\n", - "[INFO] [1702892603.566401]: Found primary_key collision in table Pose value: 74 max value in memory 2042\n", - "[INFO] [1702892603.567669]: Found primary_key collision in table Pose value: 75 max value in memory 2043\n", - "[INFO] [1702892603.569050]: Found primary_key collision in table Pose value: 76 max value in memory 2044\n", - "[INFO] [1702892603.570465]: Found primary_key collision in table Pose value: 77 max value in memory 2045\n", - "[INFO] [1702892603.571843]: Found primary_key collision in table Pose value: 78 max value in memory 2046\n", - "[INFO] [1702892603.573124]: Found primary_key collision in table Pose value: 79 max value in memory 2047\n", - "[INFO] [1702892603.574386]: Found primary_key collision in table Pose value: 80 max value in memory 2048\n", - "[INFO] [1702892603.575701]: Found primary_key collision in table Pose value: 81 max value in memory 2049\n", - "[INFO] [1702892603.576933]: Found primary_key collision in table Pose value: 82 max value in memory 2050\n", - "[INFO] [1702892603.578191]: Found primary_key collision in table Pose value: 83 max value in memory 2051\n", - "[INFO] [1702892603.579560]: Found primary_key collision in table Pose value: 84 max value in memory 2052\n", - "[INFO] [1702892603.580971]: Found primary_key collision in table Pose value: 85 max value in memory 2053\n", - "[INFO] [1702892603.582377]: Found primary_key collision in table Pose value: 86 max value in memory 2054\n", - "[INFO] [1702892603.584114]: Found primary_key collision in table Pose value: 87 max value in memory 2055\n", - "[INFO] [1702892603.585796]: Found primary_key collision in table Pose value: 88 max value in memory 2056\n", - "[INFO] [1702892603.587560]: Found primary_key collision in table Pose value: 89 max value in memory 2057\n", - "[INFO] [1702892603.589199]: Found primary_key collision in table Pose value: 90 max value in memory 2058\n", - "[INFO] [1702892603.590800]: Found primary_key collision in table Pose value: 91 max value in memory 2059\n", - "[INFO] [1702892603.592076]: Found primary_key collision in table Pose value: 92 max value in memory 2060\n", - "[INFO] [1702892603.593352]: Found primary_key collision in table Pose value: 93 max value in memory 2061\n", - "[INFO] [1702892603.594641]: Found primary_key collision in table Pose value: 94 max value in memory 2062\n", - "[INFO] [1702892603.596095]: Found primary_key collision in table Pose value: 95 max value in memory 2063\n", - "[INFO] [1702892603.597448]: Found primary_key collision in table Pose value: 96 max value in memory 2064\n", - "[INFO] [1702892603.598858]: Found primary_key collision in table Pose value: 97 max value in memory 2065\n", - "[INFO] [1702892603.600358]: Found primary_key collision in table Pose value: 98 max value in memory 2066\n", - "[INFO] [1702892603.601913]: Found primary_key collision in table Pose value: 99 max value in memory 2067\n", - "[INFO] [1702892603.603423]: Found primary_key collision in table Pose value: 100 max value in memory 2068\n", - "[INFO] [1702892603.604792]: Found primary_key collision in table Pose value: 101 max value in memory 2069\n", - "[INFO] [1702892603.606115]: Found primary_key collision in table Pose value: 102 max value in memory 2070\n", - "[INFO] [1702892603.607429]: Found primary_key collision in table Pose value: 103 max value in memory 2071\n", - "[INFO] [1702892603.608695]: Found primary_key collision in table Pose value: 104 max value in memory 2072\n", - "[INFO] [1702892603.610167]: Found primary_key collision in table Pose value: 105 max value in memory 2073\n", - "[INFO] [1702892603.611536]: Found primary_key collision in table Pose value: 106 max value in memory 2074\n", - "[INFO] [1702892603.612889]: Found primary_key collision in table Pose value: 107 max value in memory 2075\n", - "[INFO] [1702892603.614208]: Found primary_key collision in table Pose value: 108 max value in memory 2076\n", - "[INFO] [1702892603.615500]: Found primary_key collision in table Pose value: 47 max value in memory 2077\n", - "[INFO] [1702892603.616950]: Found primary_key collision in table Pose value: 48 max value in memory 2078\n", - "[INFO] [1702892603.618406]: Found primary_key collision in table Pose value: 49 max value in memory 2079\n", - "[INFO] [1702892603.619843]: Found primary_key collision in table Pose value: 50 max value in memory 2080\n", - "[INFO] [1702892603.621265]: Found primary_key collision in table Pose value: 51 max value in memory 2081\n", - "[INFO] [1702892603.622664]: Found primary_key collision in table Pose value: 52 max value in memory 2082\n", - "[INFO] [1702892603.624120]: Found primary_key collision in table Pose value: 53 max value in memory 2083\n", - "[INFO] [1702892603.625526]: Found primary_key collision in table Pose value: 54 max value in memory 2084\n", - "[INFO] [1702892603.626814]: Found primary_key collision in table Pose value: 55 max value in memory 2085\n", - "[INFO] [1702892603.628139]: Found primary_key collision in table Pose value: 56 max value in memory 2086\n", - "[INFO] [1702892603.629465]: Found primary_key collision in table Pose value: 57 max value in memory 2087\n", - "[INFO] [1702892603.630878]: Found primary_key collision in table Pose value: 58 max value in memory 2088\n", - "[INFO] [1702892603.632168]: Found primary_key collision in table Pose value: 59 max value in memory 2089\n", - "[INFO] [1702892603.633482]: Found primary_key collision in table Pose value: 60 max value in memory 2090\n", - "[INFO] [1702892603.634814]: Found primary_key collision in table Pose value: 61 max value in memory 2091\n", - "[INFO] [1702892603.636187]: Found primary_key collision in table Pose value: 62 max value in memory 2092\n", - "[INFO] [1702892603.637544]: Found primary_key collision in table Pose value: 63 max value in memory 2093\n", - "[INFO] [1702892603.638954]: Found primary_key collision in table Pose value: 64 max value in memory 2094\n", - "[INFO] [1702892603.640254]: Found primary_key collision in table Pose value: 65 max value in memory 2095\n", - "[INFO] [1702892603.641594]: Found primary_key collision in table Pose value: 66 max value in memory 2096\n", - "[INFO] [1702892603.643024]: Found primary_key collision in table Pose value: 67 max value in memory 2097\n", - "[INFO] [1702892603.644434]: Found primary_key collision in table Pose value: 68 max value in memory 2098\n", - "[INFO] [1702892603.645938]: Found primary_key collision in table Pose value: 69 max value in memory 2099\n", - "[INFO] [1702892603.647277]: Found primary_key collision in table Pose value: 70 max value in memory 2100\n", - "[INFO] [1702892603.668753]: Found primary_key collision in table Object value: 10 max value in memory 199\n", - "[INFO] [1702892603.671371]: Found primary_key collision in table Object value: 11 max value in memory 200\n", - "[INFO] [1702892603.672834]: Found primary_key collision in table Object value: 5 max value in memory 201\n", - "[INFO] [1702892603.674181]: Found primary_key collision in table Object value: 6 max value in memory 202\n", - "[INFO] [1702892603.675511]: Found primary_key collision in table Object value: 7 max value in memory 203\n", - "[INFO] [1702892603.676858]: Found primary_key collision in table Object value: 12 max value in memory 204\n", - "[INFO] [1702892603.678637]: Found primary_key collision in table Object value: 1 max value in memory 205\n", - "[INFO] [1702892603.680058]: Found primary_key collision in table Object value: 2 max value in memory 206\n", - "[INFO] [1702892603.681441]: Found primary_key collision in table Object value: 3 max value in memory 207\n", - "[INFO] [1702892603.682754]: Found primary_key collision in table Object value: 4 max value in memory 208\n", - "[INFO] [1702892603.684058]: Found primary_key collision in table Object value: 8 max value in memory 209\n", - "[INFO] [1702892603.685340]: Found primary_key collision in table Object value: 9 max value in memory 210\n", - "[INFO] [1702892603.696390]: Found primary_key collision in table RobotState value: 45 max value in memory 793\n", - "[INFO] [1702892603.698693]: Found primary_key collision in table RobotState value: 46 max value in memory 794\n", - "[INFO] [1702892603.700180]: Found primary_key collision in table RobotState value: 47 max value in memory 795\n", - "[INFO] [1702892603.701577]: Found primary_key collision in table RobotState value: 48 max value in memory 796\n", - "[INFO] [1702892603.703003]: Found primary_key collision in table RobotState value: 1 max value in memory 797\n", - "[INFO] [1702892603.704482]: Found primary_key collision in table RobotState value: 2 max value in memory 798\n", - "[INFO] [1702892603.705867]: Found primary_key collision in table RobotState value: 3 max value in memory 799\n", - "[INFO] [1702892603.707144]: Found primary_key collision in table RobotState value: 4 max value in memory 800\n", - "[INFO] [1702892603.708363]: Found primary_key collision in table RobotState value: 5 max value in memory 801\n", - "[INFO] [1702892603.709575]: Found primary_key collision in table RobotState value: 6 max value in memory 802\n", - "[INFO] [1702892603.711074]: Found primary_key collision in table RobotState value: 7 max value in memory 803\n", - "[INFO] [1702892603.712584]: Found primary_key collision in table RobotState value: 8 max value in memory 804\n", - "[INFO] [1702892603.714038]: Found primary_key collision in table RobotState value: 9 max value in memory 805\n", - "[INFO] [1702892603.715784]: Found primary_key collision in table RobotState value: 10 max value in memory 806\n", - "[INFO] [1702892603.717531]: Found primary_key collision in table RobotState value: 11 max value in memory 807\n", - "[INFO] [1702892603.719122]: Found primary_key collision in table RobotState value: 12 max value in memory 808\n", - "[INFO] [1702892603.720323]: Found primary_key collision in table RobotState value: 13 max value in memory 809\n", - "[INFO] [1702892603.721465]: Found primary_key collision in table RobotState value: 14 max value in memory 810\n", - "[INFO] [1702892603.722592]: Found primary_key collision in table RobotState value: 15 max value in memory 811\n", - "[INFO] [1702892603.723783]: Found primary_key collision in table RobotState value: 16 max value in memory 812\n", - "[INFO] [1702892603.724930]: Found primary_key collision in table RobotState value: 17 max value in memory 813\n", - "[INFO] [1702892603.726295]: Found primary_key collision in table RobotState value: 18 max value in memory 814\n", - "[INFO] [1702892603.727405]: Found primary_key collision in table RobotState value: 19 max value in memory 815\n", - "[INFO] [1702892603.728497]: Found primary_key collision in table RobotState value: 20 max value in memory 816\n", - "[INFO] [1702892603.729879]: Found primary_key collision in table RobotState value: 29 max value in memory 817\n", - "[INFO] [1702892603.731168]: Found primary_key collision in table RobotState value: 30 max value in memory 818\n", - "[INFO] [1702892603.732379]: Found primary_key collision in table RobotState value: 31 max value in memory 819\n", - "[INFO] [1702892603.733594]: Found primary_key collision in table RobotState value: 32 max value in memory 820\n", - "[INFO] [1702892603.734814]: Found primary_key collision in table RobotState value: 33 max value in memory 821\n", - "[INFO] [1702892603.735975]: Found primary_key collision in table RobotState value: 34 max value in memory 822\n", - "[INFO] [1702892603.737244]: Found primary_key collision in table RobotState value: 35 max value in memory 823\n", - "[INFO] [1702892603.738476]: Found primary_key collision in table RobotState value: 36 max value in memory 824\n", - "[INFO] [1702892603.739651]: Found primary_key collision in table RobotState value: 37 max value in memory 825\n", - "[INFO] [1702892603.740876]: Found primary_key collision in table RobotState value: 38 max value in memory 826\n", - "[INFO] [1702892603.742077]: Found primary_key collision in table RobotState value: 39 max value in memory 827\n", - "[INFO] [1702892603.743277]: Found primary_key collision in table RobotState value: 40 max value in memory 828\n", - "[INFO] [1702892603.744454]: Found primary_key collision in table RobotState value: 41 max value in memory 829\n", - "[INFO] [1702892603.745687]: Found primary_key collision in table RobotState value: 42 max value in memory 830\n", - "[INFO] [1702892603.746907]: Found primary_key collision in table RobotState value: 43 max value in memory 831\n", - "[INFO] [1702892603.747995]: Found primary_key collision in table RobotState value: 44 max value in memory 832\n", - "[INFO] [1702892603.749097]: Found primary_key collision in table RobotState value: 21 max value in memory 833\n", - "[INFO] [1702892603.750245]: Found primary_key collision in table RobotState value: 22 max value in memory 834\n", - "[INFO] [1702892603.751361]: Found primary_key collision in table RobotState value: 23 max value in memory 835\n", - "[INFO] [1702892603.752490]: Found primary_key collision in table RobotState value: 24 max value in memory 836\n", - "[INFO] [1702892603.753678]: Found primary_key collision in table RobotState value: 25 max value in memory 837\n", - "[INFO] [1702892603.754895]: Found primary_key collision in table RobotState value: 26 max value in memory 838\n", - "[INFO] [1702892603.756134]: Found primary_key collision in table RobotState value: 27 max value in memory 839\n", - "[INFO] [1702892603.757387]: Found primary_key collision in table RobotState value: 28 max value in memory 840\n", - "[INFO] [1702892603.772215]: Found primary_key collision in table TaskTreeNode value: 21 max value in memory 1931\n", - "[INFO] [1702892603.774391]: Found primary_key collision in table TaskTreeNode value: 22 max value in memory 1932\n", - "[INFO] [1702892603.776301]: Found primary_key collision in table TaskTreeNode value: 41 max value in memory 1933\n", - "[INFO] [1702892603.777767]: Found primary_key collision in table TaskTreeNode value: 60 max value in memory 1934\n", - "[INFO] [1702892603.779259]: Found primary_key collision in table TaskTreeNode value: 61 max value in memory 1935\n", - "[INFO] [1702892603.780743]: Found primary_key collision in table TaskTreeNode value: 80 max value in memory 1936\n", - "[INFO] [1702892603.782258]: Found primary_key collision in table TaskTreeNode value: 37 max value in memory 1937\n", - "[INFO] [1702892603.783487]: Found primary_key collision in table TaskTreeNode value: 38 max value in memory 1938\n", - "[INFO] [1702892603.784754]: Found primary_key collision in table TaskTreeNode value: 39 max value in memory 1939\n", - "[INFO] [1702892603.785948]: Found primary_key collision in table TaskTreeNode value: 40 max value in memory 1940\n", - "[INFO] [1702892603.787200]: Found primary_key collision in table TaskTreeNode value: 42 max value in memory 1941\n", - "[INFO] [1702892603.788421]: Found primary_key collision in table TaskTreeNode value: 43 max value in memory 1942\n", - "[INFO] [1702892603.789645]: Found primary_key collision in table TaskTreeNode value: 44 max value in memory 1943\n", - "[INFO] [1702892603.790990]: Found primary_key collision in table TaskTreeNode value: 45 max value in memory 1944\n", - "[INFO] [1702892603.792319]: Found primary_key collision in table TaskTreeNode value: 46 max value in memory 1945\n", - "[INFO] [1702892603.793724]: Found primary_key collision in table TaskTreeNode value: 47 max value in memory 1946\n", - "[INFO] [1702892603.795317]: Found primary_key collision in table TaskTreeNode value: 48 max value in memory 1947\n", - "[INFO] [1702892603.796656]: Found primary_key collision in table TaskTreeNode value: 49 max value in memory 1948\n", - "[INFO] [1702892603.797934]: Found primary_key collision in table TaskTreeNode value: 50 max value in memory 1949\n", - "[INFO] [1702892603.799231]: Found primary_key collision in table TaskTreeNode value: 51 max value in memory 1950\n", - "[INFO] [1702892603.800622]: Found primary_key collision in table TaskTreeNode value: 52 max value in memory 1951\n", - "[INFO] [1702892603.802094]: Found primary_key collision in table TaskTreeNode value: 53 max value in memory 1952\n", - "[INFO] [1702892603.803490]: Found primary_key collision in table TaskTreeNode value: 54 max value in memory 1953\n", - "[INFO] [1702892603.805110]: Found primary_key collision in table TaskTreeNode value: 55 max value in memory 1954\n", - "[INFO] [1702892603.806565]: Found primary_key collision in table TaskTreeNode value: 56 max value in memory 1955\n", - "[INFO] [1702892603.808057]: Found primary_key collision in table TaskTreeNode value: 57 max value in memory 1956\n", - "[INFO] [1702892603.809608]: Found primary_key collision in table TaskTreeNode value: 58 max value in memory 1957\n", - "[INFO] [1702892603.811123]: Found primary_key collision in table TaskTreeNode value: 59 max value in memory 1958\n", - "[INFO] [1702892603.812536]: Found primary_key collision in table TaskTreeNode value: 62 max value in memory 1959\n", - "[INFO] [1702892603.814250]: Found primary_key collision in table TaskTreeNode value: 63 max value in memory 1960\n", - "[INFO] [1702892603.815659]: Found primary_key collision in table TaskTreeNode value: 64 max value in memory 1961\n", - "[INFO] [1702892603.817213]: Found primary_key collision in table TaskTreeNode value: 65 max value in memory 1962\n", - "[INFO] [1702892603.818590]: Found primary_key collision in table TaskTreeNode value: 66 max value in memory 1963\n", - "[INFO] [1702892603.819995]: Found primary_key collision in table TaskTreeNode value: 67 max value in memory 1964\n", - "[INFO] [1702892603.821384]: Found primary_key collision in table TaskTreeNode value: 68 max value in memory 1965\n", - "[INFO] [1702892603.822762]: Found primary_key collision in table TaskTreeNode value: 69 max value in memory 1966\n", - "[INFO] [1702892603.824055]: Found primary_key collision in table TaskTreeNode value: 70 max value in memory 1967\n", - "[INFO] [1702892603.825581]: Found primary_key collision in table TaskTreeNode value: 71 max value in memory 1968\n", - "[INFO] [1702892603.826953]: Found primary_key collision in table TaskTreeNode value: 72 max value in memory 1969\n", - "[INFO] [1702892603.828198]: Found primary_key collision in table TaskTreeNode value: 73 max value in memory 1970\n", - "[INFO] [1702892603.829466]: Found primary_key collision in table TaskTreeNode value: 74 max value in memory 1971\n", - "[INFO] [1702892603.830879]: Found primary_key collision in table TaskTreeNode value: 75 max value in memory 1972\n", - "[INFO] [1702892603.832298]: Found primary_key collision in table TaskTreeNode value: 76 max value in memory 1973\n", - "[INFO] [1702892603.833627]: Found primary_key collision in table TaskTreeNode value: 77 max value in memory 1974\n", - "[INFO] [1702892603.835037]: Found primary_key collision in table TaskTreeNode value: 78 max value in memory 1975\n", - "[INFO] [1702892603.836374]: Found primary_key collision in table TaskTreeNode value: 79 max value in memory 1976\n", - "[INFO] [1702892603.837759]: Found primary_key collision in table TaskTreeNode value: 15 max value in memory 1977\n", - "[INFO] [1702892603.839082]: Found primary_key collision in table TaskTreeNode value: 16 max value in memory 1978\n", - "[INFO] [1702892603.840438]: Found primary_key collision in table TaskTreeNode value: 17 max value in memory 1979\n", - "[INFO] [1702892603.841791]: Found primary_key collision in table TaskTreeNode value: 18 max value in memory 1980\n", - "[INFO] [1702892603.843259]: Found primary_key collision in table TaskTreeNode value: 19 max value in memory 1981\n", - "[INFO] [1702892603.844700]: Found primary_key collision in table TaskTreeNode value: 20 max value in memory 1982\n", - "[INFO] [1702892603.845952]: Found primary_key collision in table TaskTreeNode value: 23 max value in memory 1983\n", - "[INFO] [1702892603.847199]: Found primary_key collision in table TaskTreeNode value: 24 max value in memory 1984\n", - "[INFO] [1702892603.848744]: Found primary_key collision in table TaskTreeNode value: 25 max value in memory 1985\n", - "[INFO] [1702892603.850066]: Found primary_key collision in table TaskTreeNode value: 26 max value in memory 1986\n", - "[INFO] [1702892603.851340]: Found primary_key collision in table TaskTreeNode value: 27 max value in memory 1987\n", - "[INFO] [1702892603.852648]: Found primary_key collision in table TaskTreeNode value: 28 max value in memory 1988\n", - "[INFO] [1702892603.853944]: Found primary_key collision in table TaskTreeNode value: 29 max value in memory 1989\n", - "[INFO] [1702892603.855369]: Found primary_key collision in table TaskTreeNode value: 30 max value in memory 1990\n", - "[INFO] [1702892603.856790]: Found primary_key collision in table TaskTreeNode value: 31 max value in memory 1991\n", - "[INFO] [1702892603.858132]: Found primary_key collision in table TaskTreeNode value: 32 max value in memory 1992\n", - "[INFO] [1702892603.859659]: Found primary_key collision in table TaskTreeNode value: 33 max value in memory 1993\n", - "[INFO] [1702892603.860972]: Found primary_key collision in table TaskTreeNode value: 34 max value in memory 1994\n", - "[INFO] [1702892603.862272]: Found primary_key collision in table TaskTreeNode value: 35 max value in memory 1995\n", - "[INFO] [1702892603.863750]: Found primary_key collision in table TaskTreeNode value: 36 max value in memory 1996\n", - "[INFO] [1702892603.865127]: Found primary_key collision in table TaskTreeNode value: 81 max value in memory 1997\n", - "[INFO] [1702892603.866404]: Found primary_key collision in table TaskTreeNode value: 82 max value in memory 1998\n", - "[INFO] [1702892603.867646]: Found primary_key collision in table TaskTreeNode value: 83 max value in memory 1999\n", - "[INFO] [1702892603.868955]: Found primary_key collision in table TaskTreeNode value: 84 max value in memory 2000\n", - "[INFO] [1702892603.873607]: Found primary_key collision in table TaskTreeNode value: 1 max value in memory 2001\n", - "[INFO] [1702892603.874894]: Found primary_key collision in table TaskTreeNode value: 2 max value in memory 2002\n", - "[INFO] [1702892603.876474]: Found primary_key collision in table TaskTreeNode value: 3 max value in memory 2003\n", - "[INFO] [1702892603.877960]: Found primary_key collision in table TaskTreeNode value: 4 max value in memory 2004\n", - "[INFO] [1702892603.879490]: Found primary_key collision in table TaskTreeNode value: 5 max value in memory 2005\n", - "[INFO] [1702892603.880989]: Found primary_key collision in table TaskTreeNode value: 6 max value in memory 2006\n", - "[INFO] [1702892603.882616]: Found primary_key collision in table TaskTreeNode value: 7 max value in memory 2007\n", - "[INFO] [1702892603.884122]: Found primary_key collision in table TaskTreeNode value: 8 max value in memory 2008\n", - "[INFO] [1702892603.885468]: Found primary_key collision in table TaskTreeNode value: 9 max value in memory 2009\n", - "[INFO] [1702892603.886817]: Found primary_key collision in table TaskTreeNode value: 10 max value in memory 2010\n", - "[INFO] [1702892603.888091]: Found primary_key collision in table TaskTreeNode value: 11 max value in memory 2011\n", - "[INFO] [1702892603.889334]: Found primary_key collision in table TaskTreeNode value: 12 max value in memory 2012\n", - "[INFO] [1702892603.890574]: Found primary_key collision in table TaskTreeNode value: 13 max value in memory 2013\n", - "[INFO] [1702892603.891792]: Found primary_key collision in table TaskTreeNode value: 14 max value in memory 2014\n", - "[INFO] [1702892603.893039]: Found primary_key collision in table TaskTreeNode value: 99 max value in memory 2015\n", - "[INFO] [1702892603.894349]: Found primary_key collision in table TaskTreeNode value: 85 max value in memory 2016\n", - "[INFO] [1702892603.895629]: Found primary_key collision in table TaskTreeNode value: 86 max value in memory 2017\n", - "[INFO] [1702892603.896842]: Found primary_key collision in table TaskTreeNode value: 87 max value in memory 2018\n", - "[INFO] [1702892603.898577]: Found primary_key collision in table TaskTreeNode value: 88 max value in memory 2019\n", - "[INFO] [1702892603.900142]: Found primary_key collision in table TaskTreeNode value: 89 max value in memory 2020\n", - "[INFO] [1702892603.901588]: Found primary_key collision in table TaskTreeNode value: 90 max value in memory 2021\n", - "[INFO] [1702892603.902976]: Found primary_key collision in table TaskTreeNode value: 91 max value in memory 2022\n", - "[INFO] [1702892603.904351]: Found primary_key collision in table TaskTreeNode value: 92 max value in memory 2023\n", - "[INFO] [1702892603.905725]: Found primary_key collision in table TaskTreeNode value: 93 max value in memory 2024\n", - "[INFO] [1702892603.907293]: Found primary_key collision in table TaskTreeNode value: 94 max value in memory 2025\n", - "[INFO] [1702892603.908561]: Found primary_key collision in table TaskTreeNode value: 95 max value in memory 2026\n", - "[INFO] [1702892603.909826]: Found primary_key collision in table TaskTreeNode value: 96 max value in memory 2027\n", - "[INFO] [1702892603.911282]: Found primary_key collision in table TaskTreeNode value: 97 max value in memory 2028\n", - "[INFO] [1702892603.912627]: Found primary_key collision in table TaskTreeNode value: 98 max value in memory 2029\n", - "[INFO] [1702892603.913994]: Found primary_key collision in table TaskTreeNode value: 100 max value in memory 2030\n", - "[INFO] [1702892603.915312]: Found primary_key collision in table TaskTreeNode value: 101 max value in memory 2031\n", - "[INFO] [1702892603.916602]: Found primary_key collision in table TaskTreeNode value: 102 max value in memory 2032\n", - "[INFO] [1702892603.917930]: Found primary_key collision in table TaskTreeNode value: 103 max value in memory 2033\n", - "[INFO] [1702892603.919319]: Found primary_key collision in table TaskTreeNode value: 104 max value in memory 2034\n", - "[INFO] [1702892603.920707]: Found primary_key collision in table TaskTreeNode value: 105 max value in memory 2035\n", - "[INFO] [1702892603.922010]: Found primary_key collision in table TaskTreeNode value: 106 max value in memory 2036\n", - "[INFO] [1702892603.923371]: Found primary_key collision in table TaskTreeNode value: 107 max value in memory 2037\n", - "[INFO] [1702892603.924678]: Found primary_key collision in table TaskTreeNode value: 108 max value in memory 2038\n", - "[INFO] [1702892603.925986]: Found primary_key collision in table TaskTreeNode value: 109 max value in memory 2039\n", - "[INFO] [1702892603.927282]: Found primary_key collision in table TaskTreeNode value: 110 max value in memory 2040\n", - "[INFO] [1702892603.928577]: Found primary_key collision in table TaskTreeNode value: 111 max value in memory 2041\n", - "[INFO] [1702892603.929875]: Found primary_key collision in table TaskTreeNode value: 112 max value in memory 2042\n", - "[INFO] [1702892603.931169]: Found primary_key collision in table TaskTreeNode value: 113 max value in memory 2043\n", - "[INFO] [1702892603.932508]: Found primary_key collision in table TaskTreeNode value: 114 max value in memory 2044\n", - "[INFO] [1702892603.933871]: Found primary_key collision in table TaskTreeNode value: 115 max value in memory 2045\n", - "[INFO] [1702892603.935261]: Found primary_key collision in table TaskTreeNode value: 116 max value in memory 2046\n", - "[INFO] [1702892603.936588]: Found primary_key collision in table TaskTreeNode value: 117 max value in memory 2047\n" + "[INFO] [1702983140.375293]: ~~~~~~~~~~~~~~~~~~~~~~~~~ProcessMetaData~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.377518]: ~~~~~~~~~~~~~~~~~~~~~~~~~Color~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.379543]: ~~~~~~~~~~~~~~~~~~~~~~~~~Designator~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.381153]: ~~~~~~~~~~~~~~~~~~~~~~~~~Position~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.382709]: ~~~~~~~~~~~~~~~~~~~~~~~~~Quaternion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.384590]: ~~~~~~~~~~~~~~~~~~~~~~~~~Code~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.386105]: ~~~~~~~~~~~~~~~~~~~~~~~~~Motion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.387769]: ~~~~~~~~~~~~~~~~~~~~~~~~~Pose~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.389364]: ~~~~~~~~~~~~~~~~~~~~~~~~~ClosingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.390867]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.392384]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.393864]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveGripperMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.395363]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.396842]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTCPMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.398589]: ~~~~~~~~~~~~~~~~~~~~~~~~~Object~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.400058]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpeningMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.401549]: ~~~~~~~~~~~~~~~~~~~~~~~~~RobotState~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.403036]: ~~~~~~~~~~~~~~~~~~~~~~~~~TaskTreeNode~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.404592]: ~~~~~~~~~~~~~~~~~~~~~~~~~WorldStateDetectingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.406397]: ~~~~~~~~~~~~~~~~~~~~~~~~~AccessingMotion~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.407969]: ~~~~~~~~~~~~~~~~~~~~~~~~~Action~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.409532]: ~~~~~~~~~~~~~~~~~~~~~~~~~BelieveObject~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.411078]: ~~~~~~~~~~~~~~~~~~~~~~~~~ObjectPart~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.412633]: ~~~~~~~~~~~~~~~~~~~~~~~~~CloseAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.414165]: ~~~~~~~~~~~~~~~~~~~~~~~~~DetectAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.415699]: ~~~~~~~~~~~~~~~~~~~~~~~~~GraspingAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.417279]: ~~~~~~~~~~~~~~~~~~~~~~~~~GripAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.418822]: ~~~~~~~~~~~~~~~~~~~~~~~~~LookAtAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.420371]: ~~~~~~~~~~~~~~~~~~~~~~~~~MoveTorsoAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.422016]: ~~~~~~~~~~~~~~~~~~~~~~~~~NavigateAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.424709]: ~~~~~~~~~~~~~~~~~~~~~~~~~OpenAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.427379]: ~~~~~~~~~~~~~~~~~~~~~~~~~ParkArmsAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.429815]: ~~~~~~~~~~~~~~~~~~~~~~~~~PickUpAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.432317]: ~~~~~~~~~~~~~~~~~~~~~~~~~PlaceAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.434606]: ~~~~~~~~~~~~~~~~~~~~~~~~~Release~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.436415]: ~~~~~~~~~~~~~~~~~~~~~~~~~SetGripperAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.438479]: ~~~~~~~~~~~~~~~~~~~~~~~~~TransportAction~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "[INFO] [1702983140.443188]: Found primary_key collision in table ProcessMetaData value: 1 max value in memory 56\n", + "[INFO] [1702983140.451132]: Found primary_key collision in table ProcessMetaData value: 2 max value in memory 57\n", + "[INFO] [1702983140.458050]: Found primary_key collision in table ProcessMetaData value: 3 max value in memory 58\n", + "[INFO] [1702983140.487381]: Found primary_key collision in table Designator value: 1 max value in memory 1999\n", + "[INFO] [1702983140.491166]: Found primary_key collision in table Designator value: 2 max value in memory 2000\n", + "[INFO] [1702983140.493167]: Found primary_key collision in table Designator value: 3 max value in memory 2001\n", + "[INFO] [1702983140.495515]: Found primary_key collision in table Designator value: 4 max value in memory 2002\n", + "[INFO] [1702983140.498704]: Found primary_key collision in table Designator value: 5 max value in memory 2003\n", + "[INFO] [1702983140.500769]: Found primary_key collision in table Designator value: 6 max value in memory 2004\n", + "[INFO] [1702983140.502732]: Found primary_key collision in table Designator value: 7 max value in memory 2005\n", + "[INFO] [1702983140.504756]: Found primary_key collision in table Designator value: 8 max value in memory 2006\n", + "[INFO] [1702983140.506561]: Found primary_key collision in table Designator value: 9 max value in memory 2007\n", + "[INFO] [1702983140.508294]: Found primary_key collision in table Designator value: 10 max value in memory 2008\n", + "[INFO] [1702983140.510082]: Found primary_key collision in table Designator value: 11 max value in memory 2009\n", + "[INFO] [1702983140.512037]: Found primary_key collision in table Designator value: 12 max value in memory 2010\n", + "[INFO] [1702983140.513960]: Found primary_key collision in table Designator value: 13 max value in memory 2011\n", + "[INFO] [1702983140.515506]: Found primary_key collision in table Designator value: 14 max value in memory 2012\n", + "[INFO] [1702983140.517187]: Found primary_key collision in table Designator value: 15 max value in memory 2013\n", + "[INFO] [1702983140.518769]: Found primary_key collision in table Designator value: 16 max value in memory 2014\n", + "[INFO] [1702983140.520280]: Found primary_key collision in table Designator value: 17 max value in memory 2015\n", + "[INFO] [1702983140.521794]: Found primary_key collision in table Designator value: 18 max value in memory 2016\n", + "[INFO] [1702983140.523352]: Found primary_key collision in table Designator value: 19 max value in memory 2017\n", + "[INFO] [1702983140.525299]: Found primary_key collision in table Designator value: 21 max value in memory 2018\n", + "[INFO] [1702983140.526868]: Found primary_key collision in table Designator value: 22 max value in memory 2019\n", + "[INFO] [1702983140.528404]: Found primary_key collision in table Designator value: 23 max value in memory 2020\n", + "[INFO] [1702983140.529980]: Found primary_key collision in table Designator value: 24 max value in memory 2021\n", + "[INFO] [1702983140.531643]: Found primary_key collision in table Designator value: 25 max value in memory 2022\n", + "[INFO] [1702983140.533286]: Found primary_key collision in table Designator value: 26 max value in memory 2023\n", + "[INFO] [1702983140.534886]: Found primary_key collision in table Designator value: 27 max value in memory 2024\n", + "[INFO] [1702983140.536453]: Found primary_key collision in table Designator value: 28 max value in memory 2025\n", + "[INFO] [1702983140.537953]: Found primary_key collision in table Designator value: 29 max value in memory 2026\n", + "[INFO] [1702983140.539587]: Found primary_key collision in table Designator value: 30 max value in memory 2027\n", + "[INFO] [1702983140.541199]: Found primary_key collision in table Designator value: 31 max value in memory 2028\n", + "[INFO] [1702983140.542732]: Found primary_key collision in table Designator value: 32 max value in memory 2029\n", + "[INFO] [1702983140.544326]: Found primary_key collision in table Designator value: 33 max value in memory 2030\n", + "[INFO] [1702983140.545831]: Found primary_key collision in table Designator value: 34 max value in memory 2031\n", + "[INFO] [1702983140.547328]: Found primary_key collision in table Designator value: 35 max value in memory 2032\n", + "[INFO] [1702983140.548820]: Found primary_key collision in table Designator value: 36 max value in memory 2033\n", + "[INFO] [1702983140.550406]: Found primary_key collision in table Designator value: 37 max value in memory 2034\n", + "[INFO] [1702983140.551958]: Found primary_key collision in table Designator value: 38 max value in memory 2035\n", + "[INFO] [1702983140.553548]: Found primary_key collision in table Designator value: 39 max value in memory 2036\n", + "[INFO] [1702983140.555182]: Found primary_key collision in table Designator value: 40 max value in memory 2037\n", + "[INFO] [1702983140.556719]: Found primary_key collision in table Designator value: 41 max value in memory 2038\n", + "[INFO] [1702983140.558255]: Found primary_key collision in table Designator value: 42 max value in memory 2039\n", + "[INFO] [1702983140.559757]: Found primary_key collision in table Designator value: 43 max value in memory 2040\n", + "[INFO] [1702983140.561242]: Found primary_key collision in table Designator value: 44 max value in memory 2041\n", + "[INFO] [1702983140.562705]: Found primary_key collision in table Designator value: 45 max value in memory 2042\n", + "[INFO] [1702983140.564208]: Found primary_key collision in table Designator value: 46 max value in memory 2043\n", + "[INFO] [1702983140.565747]: Found primary_key collision in table Designator value: 47 max value in memory 2044\n", + "[INFO] [1702983140.567669]: Found primary_key collision in table Designator value: 48 max value in memory 2045\n", + "[INFO] [1702983140.569421]: Found primary_key collision in table Designator value: 49 max value in memory 2046\n", + "[INFO] [1702983140.570911]: Found primary_key collision in table Designator value: 50 max value in memory 2047\n", + "[INFO] [1702983140.572484]: Found primary_key collision in table Designator value: 51 max value in memory 2048\n", + "[INFO] [1702983140.574052]: Found primary_key collision in table Designator value: 52 max value in memory 2049\n", + "[INFO] [1702983140.575636]: Found primary_key collision in table Designator value: 53 max value in memory 2050\n", + "[INFO] [1702983140.577566]: Found primary_key collision in table Designator value: 54 max value in memory 2051\n", + "[INFO] [1702983140.579314]: Found primary_key collision in table Designator value: 55 max value in memory 2052\n", + "[INFO] [1702983140.581164]: Found primary_key collision in table Designator value: 56 max value in memory 2053\n", + "[INFO] [1702983140.583703]: Found primary_key collision in table Designator value: 57 max value in memory 2054\n", + "[INFO] [1702983140.585811]: Found primary_key collision in table Designator value: 58 max value in memory 2055\n", + "[INFO] [1702983140.587881]: Found primary_key collision in table Designator value: 59 max value in memory 2056\n", + "[INFO] [1702983140.589876]: Found primary_key collision in table Designator value: 60 max value in memory 2057\n", + "[INFO] [1702983140.591695]: Found primary_key collision in table Designator value: 61 max value in memory 2058\n", + "[INFO] [1702983140.593204]: Found primary_key collision in table Designator value: 62 max value in memory 2059\n", + "[INFO] [1702983140.594645]: Found primary_key collision in table Designator value: 63 max value in memory 2060\n", + "[INFO] [1702983140.596159]: Found primary_key collision in table Designator value: 64 max value in memory 2061\n", + "[INFO] [1702983140.597612]: Found primary_key collision in table Designator value: 65 max value in memory 2062\n", + "[INFO] [1702983140.599078]: Found primary_key collision in table Designator value: 66 max value in memory 2063\n", + "[INFO] [1702983140.600559]: Found primary_key collision in table Designator value: 67 max value in memory 2064\n", + "[INFO] [1702983140.602111]: Found primary_key collision in table Designator value: 68 max value in memory 2065\n", + "[INFO] [1702983140.603884]: Found primary_key collision in table Designator value: 69 max value in memory 2066\n", + "[INFO] [1702983140.605649]: Found primary_key collision in table Designator value: 70 max value in memory 2067\n", + "[INFO] [1702983140.607356]: Found primary_key collision in table Designator value: 71 max value in memory 2068\n", + "[INFO] [1702983140.609249]: Found primary_key collision in table Designator value: 72 max value in memory 2069\n", + "[INFO] [1702983140.611541]: Found primary_key collision in table Designator value: 73 max value in memory 2070\n", + "[INFO] [1702983140.613838]: Found primary_key collision in table Designator value: 74 max value in memory 2071\n", + "[INFO] [1702983140.616140]: Found primary_key collision in table Designator value: 75 max value in memory 2072\n", + "[INFO] [1702983140.618710]: Found primary_key collision in table Designator value: 76 max value in memory 2073\n", + "[INFO] [1702983140.620785]: Found primary_key collision in table Designator value: 20 max value in memory 2074\n", + "[INFO] [1702983140.622509]: Found primary_key collision in table Designator value: 77 max value in memory 2075\n", + "[INFO] [1702983140.624118]: Found primary_key collision in table Designator value: 78 max value in memory 2076\n", + "[INFO] [1702983140.625955]: Found primary_key collision in table Designator value: 79 max value in memory 2077\n", + "[INFO] [1702983140.627949]: Found primary_key collision in table Designator value: 80 max value in memory 2078\n", + "[INFO] [1702983140.629957]: Found primary_key collision in table Designator value: 81 max value in memory 2079\n", + "[INFO] [1702983140.631733]: Found primary_key collision in table Designator value: 82 max value in memory 2080\n", + "[INFO] [1702983140.633257]: Found primary_key collision in table Designator value: 83 max value in memory 2081\n", + "[INFO] [1702983140.634989]: Found primary_key collision in table Designator value: 84 max value in memory 2082\n", + "[INFO] [1702983140.637035]: Found primary_key collision in table Designator value: 85 max value in memory 2083\n", + "[INFO] [1702983140.638781]: Found primary_key collision in table Designator value: 86 max value in memory 2084\n", + "[INFO] [1702983140.640450]: Found primary_key collision in table Designator value: 87 max value in memory 2085\n", + "[INFO] [1702983140.641970]: Found primary_key collision in table Designator value: 88 max value in memory 2086\n", + "[INFO] [1702983140.643768]: Found primary_key collision in table Designator value: 89 max value in memory 2087\n", + "[INFO] [1702983140.645530]: Found primary_key collision in table Designator value: 90 max value in memory 2088\n", + "[INFO] [1702983140.647256]: Found primary_key collision in table Designator value: 91 max value in memory 2089\n", + "[INFO] [1702983140.648766]: Found primary_key collision in table Designator value: 92 max value in memory 2090\n", + "[INFO] [1702983140.650302]: Found primary_key collision in table Designator value: 93 max value in memory 2091\n", + "[INFO] [1702983140.651830]: Found primary_key collision in table Designator value: 94 max value in memory 2092\n", + "[INFO] [1702983140.653315]: Found primary_key collision in table Designator value: 95 max value in memory 2093\n", + "[INFO] [1702983140.654847]: Found primary_key collision in table Designator value: 96 max value in memory 2094\n", + "[INFO] [1702983140.656360]: Found primary_key collision in table Designator value: 97 max value in memory 2095\n", + "[INFO] [1702983140.657838]: Found primary_key collision in table Designator value: 98 max value in memory 2096\n", + "[INFO] [1702983140.659347]: Found primary_key collision in table Designator value: 99 max value in memory 2097\n", + "[INFO] [1702983140.660909]: Found primary_key collision in table Designator value: 100 max value in memory 2098\n", + "[INFO] [1702983140.662428]: Found primary_key collision in table Designator value: 101 max value in memory 2099\n", + "[INFO] [1702983140.663996]: Found primary_key collision in table Designator value: 102 max value in memory 2100\n", + "[INFO] [1702983140.665594]: Found primary_key collision in table Designator value: 103 max value in memory 2101\n", + "[INFO] [1702983140.667286]: Found primary_key collision in table Designator value: 104 max value in memory 2102\n", + "[INFO] [1702983140.668983]: Found primary_key collision in table Designator value: 105 max value in memory 2103\n", + "[INFO] [1702983140.670539]: Found primary_key collision in table Designator value: 106 max value in memory 2104\n", + "[INFO] [1702983140.672079]: Found primary_key collision in table Designator value: 107 max value in memory 2105\n", + "[INFO] [1702983140.674216]: Found primary_key collision in table Designator value: 108 max value in memory 2106\n", + "[INFO] [1702983140.690823]: Found primary_key collision in table Position value: 104 max value in memory 2221\n", + "[INFO] [1702983140.693785]: Found primary_key collision in table Position value: 105 max value in memory 2222\n", + "[INFO] [1702983140.695448]: Found primary_key collision in table Position value: 106 max value in memory 2223\n", + "[INFO] [1702983140.696633]: Found primary_key collision in table Position value: 107 max value in memory 2224\n", + "[INFO] [1702983140.697783]: Found primary_key collision in table Position value: 108 max value in memory 2225\n", + "[INFO] [1702983140.698926]: Found primary_key collision in table Position value: 109 max value in memory 2226\n", + "[INFO] [1702983140.700045]: Found primary_key collision in table Position value: 110 max value in memory 2227\n", + "[INFO] [1702983140.701158]: Found primary_key collision in table Position value: 111 max value in memory 2228\n", + "[INFO] [1702983140.702438]: Found primary_key collision in table Position value: 112 max value in memory 2229\n", + "[INFO] [1702983140.703901]: Found primary_key collision in table Position value: 113 max value in memory 2230\n", + "[INFO] [1702983140.705375]: Found primary_key collision in table Position value: 114 max value in memory 2231\n", + "[INFO] [1702983140.706686]: Found primary_key collision in table Position value: 115 max value in memory 2232\n", + "[INFO] [1702983140.708006]: Found primary_key collision in table Position value: 116 max value in memory 2233\n", + "[INFO] [1702983140.709398]: Found primary_key collision in table Position value: 117 max value in memory 2234\n", + "[INFO] [1702983140.710747]: Found primary_key collision in table Position value: 118 max value in memory 2235\n", + "[INFO] [1702983140.712269]: Found primary_key collision in table Position value: 119 max value in memory 2236\n", + "[INFO] [1702983140.714001]: Found primary_key collision in table Position value: 120 max value in memory 2237\n", + "[INFO] [1702983140.715966]: Found primary_key collision in table Position value: 1 max value in memory 2238\n", + "[INFO] [1702983140.718587]: Found primary_key collision in table Position value: 2 max value in memory 2239\n", + "[INFO] [1702983140.721472]: Found primary_key collision in table Position value: 3 max value in memory 2240\n", + "[INFO] [1702983140.723544]: Found primary_key collision in table Position value: 4 max value in memory 2241\n", + "[INFO] [1702983140.726239]: Found primary_key collision in table Position value: 5 max value in memory 2242\n", + "[INFO] [1702983140.729005]: Found primary_key collision in table Position value: 6 max value in memory 2243\n", + "[INFO] [1702983140.731281]: Found primary_key collision in table Position value: 7 max value in memory 2244\n", + "[INFO] [1702983140.733507]: Found primary_key collision in table Position value: 8 max value in memory 2245\n", + "[INFO] [1702983140.735553]: Found primary_key collision in table Position value: 9 max value in memory 2246\n", + "[INFO] [1702983140.737260]: Found primary_key collision in table Position value: 10 max value in memory 2247\n", + "[INFO] [1702983140.738605]: Found primary_key collision in table Position value: 11 max value in memory 2248\n", + "[INFO] [1702983140.739798]: Found primary_key collision in table Position value: 12 max value in memory 2249\n", + "[INFO] [1702983140.740976]: Found primary_key collision in table Position value: 13 max value in memory 2250\n", + "[INFO] [1702983140.743260]: Found primary_key collision in table Position value: 14 max value in memory 2251\n", + "[INFO] [1702983140.744622]: Found primary_key collision in table Position value: 15 max value in memory 2252\n", + "[INFO] [1702983140.745999]: Found primary_key collision in table Position value: 16 max value in memory 2253\n", + "[INFO] [1702983140.747611]: Found primary_key collision in table Position value: 17 max value in memory 2254\n", + "[INFO] [1702983140.749185]: Found primary_key collision in table Position value: 18 max value in memory 2255\n", + "[INFO] [1702983140.750929]: Found primary_key collision in table Position value: 19 max value in memory 2256\n", + "[INFO] [1702983140.752607]: Found primary_key collision in table Position value: 20 max value in memory 2257\n", + "[INFO] [1702983140.754260]: Found primary_key collision in table Position value: 21 max value in memory 2258\n", + "[INFO] [1702983140.756540]: Found primary_key collision in table Position value: 22 max value in memory 2259\n", + "[INFO] [1702983140.758622]: Found primary_key collision in table Position value: 23 max value in memory 2260\n", + "[INFO] [1702983140.761086]: Found primary_key collision in table Position value: 24 max value in memory 2261\n", + "[INFO] [1702983140.763119]: Found primary_key collision in table Position value: 25 max value in memory 2262\n", + "[INFO] [1702983140.765159]: Found primary_key collision in table Position value: 26 max value in memory 2263\n", + "[INFO] [1702983140.767105]: Found primary_key collision in table Position value: 27 max value in memory 2264\n", + "[INFO] [1702983140.768697]: Found primary_key collision in table Position value: 28 max value in memory 2265\n", + "[INFO] [1702983140.770432]: Found primary_key collision in table Position value: 29 max value in memory 2266\n", + "[INFO] [1702983140.772270]: Found primary_key collision in table Position value: 30 max value in memory 2267\n", + "[INFO] [1702983140.773938]: Found primary_key collision in table Position value: 31 max value in memory 2268\n", + "[INFO] [1702983140.775504]: Found primary_key collision in table Position value: 32 max value in memory 2269\n", + "[INFO] [1702983140.777225]: Found primary_key collision in table Position value: 33 max value in memory 2270\n", + "[INFO] [1702983140.778982]: Found primary_key collision in table Position value: 34 max value in memory 2271\n", + "[INFO] [1702983140.780921]: Found primary_key collision in table Position value: 35 max value in memory 2272\n", + "[INFO] [1702983140.782705]: Found primary_key collision in table Position value: 36 max value in memory 2273\n", + "[INFO] [1702983140.784870]: Found primary_key collision in table Position value: 37 max value in memory 2274\n", + "[INFO] [1702983140.786869]: Found primary_key collision in table Position value: 38 max value in memory 2275\n", + "[INFO] [1702983140.788549]: Found primary_key collision in table Position value: 39 max value in memory 2276\n", + "[INFO] [1702983140.790158]: Found primary_key collision in table Position value: 40 max value in memory 2277\n", + "[INFO] [1702983140.791539]: Found primary_key collision in table Position value: 41 max value in memory 2278\n", + "[INFO] [1702983140.792974]: Found primary_key collision in table Position value: 42 max value in memory 2279\n", + "[INFO] [1702983140.794354]: Found primary_key collision in table Position value: 43 max value in memory 2280\n", + "[INFO] [1702983140.795963]: Found primary_key collision in table Position value: 44 max value in memory 2281\n", + "[INFO] [1702983140.797665]: Found primary_key collision in table Position value: 45 max value in memory 2282\n", + "[INFO] [1702983140.799089]: Found primary_key collision in table Position value: 46 max value in memory 2283\n", + "[INFO] [1702983140.800694]: Found primary_key collision in table Position value: 47 max value in memory 2284\n", + "[INFO] [1702983140.802086]: Found primary_key collision in table Position value: 48 max value in memory 2285\n", + "[INFO] [1702983140.803602]: Found primary_key collision in table Position value: 49 max value in memory 2286\n", + "[INFO] [1702983140.805382]: Found primary_key collision in table Position value: 50 max value in memory 2287\n", + "[INFO] [1702983140.806960]: Found primary_key collision in table Position value: 51 max value in memory 2288\n", + "[INFO] [1702983140.808692]: Found primary_key collision in table Position value: 52 max value in memory 2289\n", + "[INFO] [1702983140.810307]: Found primary_key collision in table Position value: 53 max value in memory 2290\n", + "[INFO] [1702983140.811870]: Found primary_key collision in table Position value: 54 max value in memory 2291\n", + "[INFO] [1702983140.813625]: Found primary_key collision in table Position value: 55 max value in memory 2292\n", + "[INFO] [1702983140.815728]: Found primary_key collision in table Position value: 56 max value in memory 2293\n", + "[INFO] [1702983140.817941]: Found primary_key collision in table Position value: 57 max value in memory 2294\n", + "[INFO] [1702983140.819819]: Found primary_key collision in table Position value: 58 max value in memory 2295\n", + "[INFO] [1702983140.821540]: Found primary_key collision in table Position value: 59 max value in memory 2296\n", + "[INFO] [1702983140.823102]: Found primary_key collision in table Position value: 60 max value in memory 2297\n", + "[INFO] [1702983140.824502]: Found primary_key collision in table Position value: 61 max value in memory 2298\n", + "[INFO] [1702983140.825991]: Found primary_key collision in table Position value: 62 max value in memory 2299\n", + "[INFO] [1702983140.827542]: Found primary_key collision in table Position value: 63 max value in memory 2300\n", + "[INFO] [1702983140.829317]: Found primary_key collision in table Position value: 64 max value in memory 2301\n", + "[INFO] [1702983140.830838]: Found primary_key collision in table Position value: 65 max value in memory 2302\n", + "[INFO] [1702983140.832246]: Found primary_key collision in table Position value: 66 max value in memory 2303\n", + "[INFO] [1702983140.833657]: Found primary_key collision in table Position value: 67 max value in memory 2304\n", + "[INFO] [1702983140.834992]: Found primary_key collision in table Position value: 68 max value in memory 2305\n", + "[INFO] [1702983140.836339]: Found primary_key collision in table Position value: 69 max value in memory 2306\n", + "[INFO] [1702983140.837836]: Found primary_key collision in table Position value: 70 max value in memory 2307\n", + "[INFO] [1702983140.839260]: Found primary_key collision in table Position value: 71 max value in memory 2308\n", + "[INFO] [1702983140.840621]: Found primary_key collision in table Position value: 72 max value in memory 2309\n", + "[INFO] [1702983140.842064]: Found primary_key collision in table Position value: 73 max value in memory 2310\n", + "[INFO] [1702983140.843440]: Found primary_key collision in table Position value: 74 max value in memory 2311\n", + "[INFO] [1702983140.844786]: Found primary_key collision in table Position value: 75 max value in memory 2312\n", + "[INFO] [1702983140.846137]: Found primary_key collision in table Position value: 76 max value in memory 2313\n", + "[INFO] [1702983140.847443]: Found primary_key collision in table Position value: 77 max value in memory 2314\n", + "[INFO] [1702983140.848782]: Found primary_key collision in table Position value: 78 max value in memory 2315\n", + "[INFO] [1702983140.850315]: Found primary_key collision in table Position value: 79 max value in memory 2316\n", + "[INFO] [1702983140.852046]: Found primary_key collision in table Position value: 80 max value in memory 2317\n", + "[INFO] [1702983140.853552]: Found primary_key collision in table Position value: 81 max value in memory 2318\n", + "[INFO] [1702983140.855037]: Found primary_key collision in table Position value: 82 max value in memory 2319\n", + "[INFO] [1702983140.856592]: Found primary_key collision in table Position value: 83 max value in memory 2320\n", + "[INFO] [1702983140.857977]: Found primary_key collision in table Position value: 84 max value in memory 2321\n", + "[INFO] [1702983140.859483]: Found primary_key collision in table Position value: 85 max value in memory 2322\n", + "[INFO] [1702983140.860808]: Found primary_key collision in table Position value: 86 max value in memory 2323\n", + "[INFO] [1702983140.862532]: Found primary_key collision in table Position value: 87 max value in memory 2324\n", + "[INFO] [1702983140.864031]: Found primary_key collision in table Position value: 88 max value in memory 2325\n", + "[INFO] [1702983140.865524]: Found primary_key collision in table Position value: 89 max value in memory 2326\n", + "[INFO] [1702983140.867004]: Found primary_key collision in table Position value: 90 max value in memory 2327\n", + "[INFO] [1702983140.868497]: Found primary_key collision in table Position value: 91 max value in memory 2328\n", + "[INFO] [1702983140.869885]: Found primary_key collision in table Position value: 92 max value in memory 2329\n", + "[INFO] [1702983140.871481]: Found primary_key collision in table Position value: 93 max value in memory 2330\n", + "[INFO] [1702983140.873601]: Found primary_key collision in table Position value: 94 max value in memory 2331\n", + "[INFO] [1702983140.875400]: Found primary_key collision in table Position value: 95 max value in memory 2332\n", + "[INFO] [1702983140.877516]: Found primary_key collision in table Position value: 96 max value in memory 2333\n", + "[INFO] [1702983140.878923]: Found primary_key collision in table Position value: 97 max value in memory 2334\n", + "[INFO] [1702983140.880291]: Found primary_key collision in table Position value: 98 max value in memory 2335\n", + "[INFO] [1702983140.881685]: Found primary_key collision in table Position value: 99 max value in memory 2336\n", + "[INFO] [1702983140.883095]: Found primary_key collision in table Position value: 100 max value in memory 2337\n", + "[INFO] [1702983140.884486]: Found primary_key collision in table Position value: 101 max value in memory 2338\n", + "[INFO] [1702983140.885833]: Found primary_key collision in table Position value: 102 max value in memory 2339\n", + "[INFO] [1702983140.887165]: Found primary_key collision in table Position value: 103 max value in memory 2340\n", + "[INFO] [1702983140.898126]: Found primary_key collision in table Quaternion value: 1 max value in memory 2221\n", + "[INFO] [1702983140.900321]: Found primary_key collision in table Quaternion value: 2 max value in memory 2222\n", + "[INFO] [1702983140.901849]: Found primary_key collision in table Quaternion value: 3 max value in memory 2223\n", + "[INFO] [1702983140.903312]: Found primary_key collision in table Quaternion value: 4 max value in memory 2224\n", + "[INFO] [1702983140.904759]: Found primary_key collision in table Quaternion value: 5 max value in memory 2225\n", + "[INFO] [1702983140.906202]: Found primary_key collision in table Quaternion value: 6 max value in memory 2226\n", + "[INFO] [1702983140.907699]: Found primary_key collision in table Quaternion value: 7 max value in memory 2227\n", + "[INFO] [1702983140.909689]: Found primary_key collision in table Quaternion value: 8 max value in memory 2228\n", + "[INFO] [1702983140.911434]: Found primary_key collision in table Quaternion value: 9 max value in memory 2229\n", + "[INFO] [1702983140.913111]: Found primary_key collision in table Quaternion value: 10 max value in memory 2230\n", + "[INFO] [1702983140.914713]: Found primary_key collision in table Quaternion value: 11 max value in memory 2231\n", + "[INFO] [1702983140.916343]: Found primary_key collision in table Quaternion value: 12 max value in memory 2232\n", + "[INFO] [1702983140.917862]: Found primary_key collision in table Quaternion value: 13 max value in memory 2233\n", + "[INFO] [1702983140.919335]: Found primary_key collision in table Quaternion value: 14 max value in memory 2234\n", + "[INFO] [1702983140.920754]: Found primary_key collision in table Quaternion value: 15 max value in memory 2235\n", + "[INFO] [1702983140.922106]: Found primary_key collision in table Quaternion value: 16 max value in memory 2236\n", + "[INFO] [1702983140.923407]: Found primary_key collision in table Quaternion value: 17 max value in memory 2237\n", + "[INFO] [1702983140.924741]: Found primary_key collision in table Quaternion value: 18 max value in memory 2238\n", + "[INFO] [1702983140.926223]: Found primary_key collision in table Quaternion value: 19 max value in memory 2239\n", + "[INFO] [1702983140.927543]: Found primary_key collision in table Quaternion value: 20 max value in memory 2240\n", + "[INFO] [1702983140.928918]: Found primary_key collision in table Quaternion value: 21 max value in memory 2241\n", + "[INFO] [1702983140.930319]: Found primary_key collision in table Quaternion value: 22 max value in memory 2242\n", + "[INFO] [1702983140.931756]: Found primary_key collision in table Quaternion value: 23 max value in memory 2243\n", + "[INFO] [1702983140.933092]: Found primary_key collision in table Quaternion value: 24 max value in memory 2244\n", + "[INFO] [1702983140.934408]: Found primary_key collision in table Quaternion value: 25 max value in memory 2245\n", + "[INFO] [1702983140.935831]: Found primary_key collision in table Quaternion value: 26 max value in memory 2246\n", + "[INFO] [1702983140.937280]: Found primary_key collision in table Quaternion value: 27 max value in memory 2247\n", + "[INFO] [1702983140.938918]: Found primary_key collision in table Quaternion value: 28 max value in memory 2248\n", + "[INFO] [1702983140.940654]: Found primary_key collision in table Quaternion value: 29 max value in memory 2249\n", + "[INFO] [1702983140.942223]: Found primary_key collision in table Quaternion value: 30 max value in memory 2250\n", + "[INFO] [1702983140.943880]: Found primary_key collision in table Quaternion value: 31 max value in memory 2251\n", + "[INFO] [1702983140.945344]: Found primary_key collision in table Quaternion value: 32 max value in memory 2252\n", + "[INFO] [1702983140.946694]: Found primary_key collision in table Quaternion value: 33 max value in memory 2253\n", + "[INFO] [1702983140.948061]: Found primary_key collision in table Quaternion value: 34 max value in memory 2254\n", + "[INFO] [1702983140.949365]: Found primary_key collision in table Quaternion value: 35 max value in memory 2255\n", + "[INFO] [1702983140.950659]: Found primary_key collision in table Quaternion value: 36 max value in memory 2256\n", + "[INFO] [1702983140.951962]: Found primary_key collision in table Quaternion value: 37 max value in memory 2257\n", + "[INFO] [1702983140.953274]: Found primary_key collision in table Quaternion value: 38 max value in memory 2258\n", + "[INFO] [1702983140.954577]: Found primary_key collision in table Quaternion value: 39 max value in memory 2259\n", + "[INFO] [1702983140.955968]: Found primary_key collision in table Quaternion value: 40 max value in memory 2260\n", + "[INFO] [1702983140.957290]: Found primary_key collision in table Quaternion value: 41 max value in memory 2261\n", + "[INFO] [1702983140.958584]: Found primary_key collision in table Quaternion value: 42 max value in memory 2262\n", + "[INFO] [1702983140.959878]: Found primary_key collision in table Quaternion value: 43 max value in memory 2263\n", + "[INFO] [1702983140.961226]: Found primary_key collision in table Quaternion value: 44 max value in memory 2264\n", + "[INFO] [1702983140.962569]: Found primary_key collision in table Quaternion value: 45 max value in memory 2265\n", + "[INFO] [1702983140.963907]: Found primary_key collision in table Quaternion value: 46 max value in memory 2266\n", + "[INFO] [1702983140.965240]: Found primary_key collision in table Quaternion value: 47 max value in memory 2267\n", + "[INFO] [1702983140.966537]: Found primary_key collision in table Quaternion value: 48 max value in memory 2268\n", + "[INFO] [1702983140.967880]: Found primary_key collision in table Quaternion value: 49 max value in memory 2269\n", + "[INFO] [1702983140.969196]: Found primary_key collision in table Quaternion value: 50 max value in memory 2270\n", + "[INFO] [1702983140.970513]: Found primary_key collision in table Quaternion value: 51 max value in memory 2271\n", + "[INFO] [1702983140.971958]: Found primary_key collision in table Quaternion value: 52 max value in memory 2272\n", + "[INFO] [1702983140.973289]: Found primary_key collision in table Quaternion value: 53 max value in memory 2273\n", + "[INFO] [1702983140.974588]: Found primary_key collision in table Quaternion value: 54 max value in memory 2274\n", + "[INFO] [1702983140.975921]: Found primary_key collision in table Quaternion value: 55 max value in memory 2275\n", + "[INFO] [1702983140.977266]: Found primary_key collision in table Quaternion value: 56 max value in memory 2276\n", + "[INFO] [1702983140.978573]: Found primary_key collision in table Quaternion value: 57 max value in memory 2277\n", + "[INFO] [1702983140.979904]: Found primary_key collision in table Quaternion value: 58 max value in memory 2278\n", + "[INFO] [1702983140.981456]: Found primary_key collision in table Quaternion value: 59 max value in memory 2279\n", + "[INFO] [1702983140.982997]: Found primary_key collision in table Quaternion value: 60 max value in memory 2280\n", + "[INFO] [1702983140.986715]: Found primary_key collision in table Quaternion value: 61 max value in memory 2281\n", + "[INFO] [1702983140.988128]: Found primary_key collision in table Quaternion value: 62 max value in memory 2282\n", + "[INFO] [1702983140.989493]: Found primary_key collision in table Quaternion value: 63 max value in memory 2283\n", + "[INFO] [1702983140.991034]: Found primary_key collision in table Quaternion value: 64 max value in memory 2284\n", + "[INFO] [1702983140.992369]: Found primary_key collision in table Quaternion value: 65 max value in memory 2285\n", + "[INFO] [1702983140.993685]: Found primary_key collision in table Quaternion value: 66 max value in memory 2286\n", + "[INFO] [1702983140.995034]: Found primary_key collision in table Quaternion value: 67 max value in memory 2287\n", + "[INFO] [1702983140.996588]: Found primary_key collision in table Quaternion value: 68 max value in memory 2288\n", + "[INFO] [1702983140.998092]: Found primary_key collision in table Quaternion value: 69 max value in memory 2289\n", + "[INFO] [1702983140.999534]: Found primary_key collision in table Quaternion value: 70 max value in memory 2290\n", + "[INFO] [1702983141.000989]: Found primary_key collision in table Quaternion value: 71 max value in memory 2291\n", + "[INFO] [1702983141.002463]: Found primary_key collision in table Quaternion value: 72 max value in memory 2292\n", + "[INFO] [1702983141.003873]: Found primary_key collision in table Quaternion value: 73 max value in memory 2293\n", + "[INFO] [1702983141.005302]: Found primary_key collision in table Quaternion value: 74 max value in memory 2294\n", + "[INFO] [1702983141.007018]: Found primary_key collision in table Quaternion value: 75 max value in memory 2295\n", + "[INFO] [1702983141.008644]: Found primary_key collision in table Quaternion value: 76 max value in memory 2296\n", + "[INFO] [1702983141.010314]: Found primary_key collision in table Quaternion value: 77 max value in memory 2297\n", + "[INFO] [1702983141.011965]: Found primary_key collision in table Quaternion value: 78 max value in memory 2298\n", + "[INFO] [1702983141.013427]: Found primary_key collision in table Quaternion value: 79 max value in memory 2299\n", + "[INFO] [1702983141.014794]: Found primary_key collision in table Quaternion value: 80 max value in memory 2300\n", + "[INFO] [1702983141.016180]: Found primary_key collision in table Quaternion value: 81 max value in memory 2301\n", + "[INFO] [1702983141.017545]: Found primary_key collision in table Quaternion value: 82 max value in memory 2302\n", + "[INFO] [1702983141.019102]: Found primary_key collision in table Quaternion value: 83 max value in memory 2303\n", + "[INFO] [1702983141.020585]: Found primary_key collision in table Quaternion value: 84 max value in memory 2304\n", + "[INFO] [1702983141.022021]: Found primary_key collision in table Quaternion value: 85 max value in memory 2305\n", + "[INFO] [1702983141.023510]: Found primary_key collision in table Quaternion value: 86 max value in memory 2306\n", + "[INFO] [1702983141.025079]: Found primary_key collision in table Quaternion value: 87 max value in memory 2307\n", + "[INFO] [1702983141.026657]: Found primary_key collision in table Quaternion value: 88 max value in memory 2308\n", + "[INFO] [1702983141.028398]: Found primary_key collision in table Quaternion value: 89 max value in memory 2309\n", + "[INFO] [1702983141.029981]: Found primary_key collision in table Quaternion value: 90 max value in memory 2310\n", + "[INFO] [1702983141.031583]: Found primary_key collision in table Quaternion value: 91 max value in memory 2311\n", + "[INFO] [1702983141.033281]: Found primary_key collision in table Quaternion value: 92 max value in memory 2312\n", + "[INFO] [1702983141.034969]: Found primary_key collision in table Quaternion value: 93 max value in memory 2313\n", + "[INFO] [1702983141.036636]: Found primary_key collision in table Quaternion value: 94 max value in memory 2314\n", + "[INFO] [1702983141.038156]: Found primary_key collision in table Quaternion value: 95 max value in memory 2315\n", + "[INFO] [1702983141.039649]: Found primary_key collision in table Quaternion value: 96 max value in memory 2316\n", + "[INFO] [1702983141.041187]: Found primary_key collision in table Quaternion value: 97 max value in memory 2317\n", + "[INFO] [1702983141.042617]: Found primary_key collision in table Quaternion value: 98 max value in memory 2318\n", + "[INFO] [1702983141.044012]: Found primary_key collision in table Quaternion value: 99 max value in memory 2319\n", + "[INFO] [1702983141.045381]: Found primary_key collision in table Quaternion value: 100 max value in memory 2320\n", + "[INFO] [1702983141.048997]: Found primary_key collision in table Quaternion value: 101 max value in memory 2321\n", + "[INFO] [1702983141.050425]: Found primary_key collision in table Quaternion value: 102 max value in memory 2322\n", + "[INFO] [1702983141.051759]: Found primary_key collision in table Quaternion value: 103 max value in memory 2323\n", + "[INFO] [1702983141.053110]: Found primary_key collision in table Quaternion value: 104 max value in memory 2324\n", + "[INFO] [1702983141.054426]: Found primary_key collision in table Quaternion value: 105 max value in memory 2325\n", + "[INFO] [1702983141.055745]: Found primary_key collision in table Quaternion value: 106 max value in memory 2326\n", + "[INFO] [1702983141.057128]: Found primary_key collision in table Quaternion value: 107 max value in memory 2327\n", + "[INFO] [1702983141.058709]: Found primary_key collision in table Quaternion value: 108 max value in memory 2328\n", + "[INFO] [1702983141.060469]: Found primary_key collision in table Quaternion value: 109 max value in memory 2329\n", + "[INFO] [1702983141.062376]: Found primary_key collision in table Quaternion value: 110 max value in memory 2330\n", + "[INFO] [1702983141.063997]: Found primary_key collision in table Quaternion value: 111 max value in memory 2331\n", + "[INFO] [1702983141.065480]: Found primary_key collision in table Quaternion value: 112 max value in memory 2332\n", + "[INFO] [1702983141.066829]: Found primary_key collision in table Quaternion value: 113 max value in memory 2333\n", + "[INFO] [1702983141.068192]: Found primary_key collision in table Quaternion value: 114 max value in memory 2334\n", + "[INFO] [1702983141.069578]: Found primary_key collision in table Quaternion value: 115 max value in memory 2335\n", + "[INFO] [1702983141.071041]: Found primary_key collision in table Quaternion value: 116 max value in memory 2336\n", + "[INFO] [1702983141.072470]: Found primary_key collision in table Quaternion value: 117 max value in memory 2337\n", + "[INFO] [1702983141.073859]: Found primary_key collision in table Quaternion value: 118 max value in memory 2338\n", + "[INFO] [1702983141.075313]: Found primary_key collision in table Quaternion value: 119 max value in memory 2339\n", + "[INFO] [1702983141.076733]: Found primary_key collision in table Quaternion value: 120 max value in memory 2340\n", + "[INFO] [1702983141.088747]: Found primary_key collision in table Code value: 1 max value in memory 2165\n", + "[INFO] [1702983141.091197]: Found primary_key collision in table Code value: 2 max value in memory 2166\n", + "[INFO] [1702983141.092789]: Found primary_key collision in table Code value: 21 max value in memory 2167\n", + "[INFO] [1702983141.093907]: Found primary_key collision in table Code value: 22 max value in memory 2168\n", + "[INFO] [1702983141.095402]: Found primary_key collision in table Code value: 41 max value in memory 2169\n", + "[INFO] [1702983141.096872]: Found primary_key collision in table Code value: 60 max value in memory 2170\n", + "[INFO] [1702983141.098152]: Found primary_key collision in table Code value: 61 max value in memory 2171\n", + "[INFO] [1702983141.099483]: Found primary_key collision in table Code value: 80 max value in memory 2172\n", + "[INFO] [1702983141.100978]: Found primary_key collision in table Code value: 99 max value in memory 2173\n", + "[INFO] [1702983141.102331]: Found primary_key collision in table Code value: 3 max value in memory 2174\n", + "[INFO] [1702983141.103963]: Found primary_key collision in table Code value: 4 max value in memory 2175\n", + "[INFO] [1702983141.105609]: Found primary_key collision in table Code value: 5 max value in memory 2176\n", + "[INFO] [1702983141.107313]: Found primary_key collision in table Code value: 6 max value in memory 2177\n", + "[INFO] [1702983141.109206]: Found primary_key collision in table Code value: 7 max value in memory 2178\n", + "[INFO] [1702983141.110592]: Found primary_key collision in table Code value: 8 max value in memory 2179\n", + "[INFO] [1702983141.111916]: Found primary_key collision in table Code value: 9 max value in memory 2180\n", + "[INFO] [1702983141.113242]: Found primary_key collision in table Code value: 10 max value in memory 2181\n", + "[INFO] [1702983141.114548]: Found primary_key collision in table Code value: 11 max value in memory 2182\n", + "[INFO] [1702983141.115838]: Found primary_key collision in table Code value: 12 max value in memory 2183\n", + "[INFO] [1702983141.117163]: Found primary_key collision in table Code value: 13 max value in memory 2184\n", + "[INFO] [1702983141.118581]: Found primary_key collision in table Code value: 14 max value in memory 2185\n", + "[INFO] [1702983141.119880]: Found primary_key collision in table Code value: 15 max value in memory 2186\n", + "[INFO] [1702983141.121192]: Found primary_key collision in table Code value: 16 max value in memory 2187\n", + "[INFO] [1702983141.122492]: Found primary_key collision in table Code value: 17 max value in memory 2188\n", + "[INFO] [1702983141.123806]: Found primary_key collision in table Code value: 18 max value in memory 2189\n", + "[INFO] [1702983141.125157]: Found primary_key collision in table Code value: 19 max value in memory 2190\n", + "[INFO] [1702983141.126626]: Found primary_key collision in table Code value: 20 max value in memory 2191\n", + "[INFO] [1702983141.128310]: Found primary_key collision in table Code value: 23 max value in memory 2192\n", + "[INFO] [1702983141.129658]: Found primary_key collision in table Code value: 25 max value in memory 2193\n", + "[INFO] [1702983141.130972]: Found primary_key collision in table Code value: 26 max value in memory 2194\n", + "[INFO] [1702983141.132664]: Found primary_key collision in table Code value: 27 max value in memory 2195\n", + "[INFO] [1702983141.134043]: Found primary_key collision in table Code value: 28 max value in memory 2196\n", + "[INFO] [1702983141.135368]: Found primary_key collision in table Code value: 29 max value in memory 2197\n", + "[INFO] [1702983141.136713]: Found primary_key collision in table Code value: 30 max value in memory 2198\n", + "[INFO] [1702983141.138046]: Found primary_key collision in table Code value: 31 max value in memory 2199\n", + "[INFO] [1702983141.139432]: Found primary_key collision in table Code value: 32 max value in memory 2200\n", + "[INFO] [1702983141.141065]: Found primary_key collision in table Code value: 33 max value in memory 2201\n", + "[INFO] [1702983141.142772]: Found primary_key collision in table Code value: 34 max value in memory 2202\n", + "[INFO] [1702983141.144274]: Found primary_key collision in table Code value: 35 max value in memory 2203\n", + "[INFO] [1702983141.145721]: Found primary_key collision in table Code value: 36 max value in memory 2204\n", + "[INFO] [1702983141.147188]: Found primary_key collision in table Code value: 37 max value in memory 2205\n", + "[INFO] [1702983141.148605]: Found primary_key collision in table Code value: 38 max value in memory 2206\n", + "[INFO] [1702983141.150080]: Found primary_key collision in table Code value: 39 max value in memory 2207\n", + "[INFO] [1702983141.151910]: Found primary_key collision in table Code value: 40 max value in memory 2208\n", + "[INFO] [1702983141.153322]: Found primary_key collision in table Code value: 42 max value in memory 2209\n", + "[INFO] [1702983141.154582]: Found primary_key collision in table Code value: 43 max value in memory 2210\n", + "[INFO] [1702983141.155949]: Found primary_key collision in table Code value: 44 max value in memory 2211\n", + "[INFO] [1702983141.157273]: Found primary_key collision in table Code value: 45 max value in memory 2212\n", + "[INFO] [1702983141.158810]: Found primary_key collision in table Code value: 46 max value in memory 2213\n", + "[INFO] [1702983141.160491]: Found primary_key collision in table Code value: 47 max value in memory 2214\n", + "[INFO] [1702983141.161900]: Found primary_key collision in table Code value: 48 max value in memory 2215\n", + "[INFO] [1702983141.163523]: Found primary_key collision in table Code value: 49 max value in memory 2216\n", + "[INFO] [1702983141.165102]: Found primary_key collision in table Code value: 50 max value in memory 2217\n", + "[INFO] [1702983141.166693]: Found primary_key collision in table Code value: 51 max value in memory 2218\n", + "[INFO] [1702983141.167995]: Found primary_key collision in table Code value: 52 max value in memory 2219\n", + "[INFO] [1702983141.169437]: Found primary_key collision in table Code value: 53 max value in memory 2220\n", + "[INFO] [1702983141.170921]: Found primary_key collision in table Code value: 54 max value in memory 2221\n", + "[INFO] [1702983141.172504]: Found primary_key collision in table Code value: 55 max value in memory 2222\n", + "[INFO] [1702983141.174295]: Found primary_key collision in table Code value: 56 max value in memory 2223\n", + "[INFO] [1702983141.175949]: Found primary_key collision in table Code value: 57 max value in memory 2224\n", + "[INFO] [1702983141.177617]: Found primary_key collision in table Code value: 58 max value in memory 2225\n", + "[INFO] [1702983141.179288]: Found primary_key collision in table Code value: 59 max value in memory 2226\n", + "[INFO] [1702983141.180998]: Found primary_key collision in table Code value: 62 max value in memory 2227\n", + "[INFO] [1702983141.183250]: Found primary_key collision in table Code value: 63 max value in memory 2228\n", + "[INFO] [1702983141.184985]: Found primary_key collision in table Code value: 64 max value in memory 2229\n", + "[INFO] [1702983141.186500]: Found primary_key collision in table Code value: 65 max value in memory 2230\n", + "[INFO] [1702983141.188090]: Found primary_key collision in table Code value: 66 max value in memory 2231\n", + "[INFO] [1702983141.189617]: Found primary_key collision in table Code value: 67 max value in memory 2232\n", + "[INFO] [1702983141.191160]: Found primary_key collision in table Code value: 68 max value in memory 2233\n", + "[INFO] [1702983141.192691]: Found primary_key collision in table Code value: 69 max value in memory 2234\n", + "[INFO] [1702983141.194211]: Found primary_key collision in table Code value: 70 max value in memory 2235\n", + "[INFO] [1702983141.195727]: Found primary_key collision in table Code value: 71 max value in memory 2236\n", + "[INFO] [1702983141.197345]: Found primary_key collision in table Code value: 72 max value in memory 2237\n", + "[INFO] [1702983141.198761]: Found primary_key collision in table Code value: 73 max value in memory 2238\n", + "[INFO] [1702983141.200398]: Found primary_key collision in table Code value: 74 max value in memory 2239\n", + "[INFO] [1702983141.201935]: Found primary_key collision in table Code value: 75 max value in memory 2240\n", + "[INFO] [1702983141.203305]: Found primary_key collision in table Code value: 76 max value in memory 2241\n", + "[INFO] [1702983141.204779]: Found primary_key collision in table Code value: 77 max value in memory 2242\n", + "[INFO] [1702983141.206375]: Found primary_key collision in table Code value: 78 max value in memory 2243\n", + "[INFO] [1702983141.208308]: Found primary_key collision in table Code value: 79 max value in memory 2244\n", + "[INFO] [1702983141.209922]: Found primary_key collision in table Code value: 81 max value in memory 2245\n", + "[INFO] [1702983141.211468]: Found primary_key collision in table Code value: 82 max value in memory 2246\n", + "[INFO] [1702983141.213253]: Found primary_key collision in table Code value: 83 max value in memory 2247\n", + "[INFO] [1702983141.214950]: Found primary_key collision in table Code value: 84 max value in memory 2248\n", + "[INFO] [1702983141.216438]: Found primary_key collision in table Code value: 24 max value in memory 2249\n", + "[INFO] [1702983141.217956]: Found primary_key collision in table Code value: 85 max value in memory 2250\n", + "[INFO] [1702983141.219383]: Found primary_key collision in table Code value: 86 max value in memory 2251\n", + "[INFO] [1702983141.220852]: Found primary_key collision in table Code value: 87 max value in memory 2252\n", + "[INFO] [1702983141.222367]: Found primary_key collision in table Code value: 88 max value in memory 2253\n", + "[INFO] [1702983141.223833]: Found primary_key collision in table Code value: 89 max value in memory 2254\n", + "[INFO] [1702983141.225266]: Found primary_key collision in table Code value: 90 max value in memory 2255\n", + "[INFO] [1702983141.226738]: Found primary_key collision in table Code value: 91 max value in memory 2256\n", + "[INFO] [1702983141.228542]: Found primary_key collision in table Code value: 92 max value in memory 2257\n", + "[INFO] [1702983141.230120]: Found primary_key collision in table Code value: 93 max value in memory 2258\n", + "[INFO] [1702983141.231697]: Found primary_key collision in table Code value: 94 max value in memory 2259\n", + "[INFO] [1702983141.233503]: Found primary_key collision in table Code value: 95 max value in memory 2260\n", + "[INFO] [1702983141.234985]: Found primary_key collision in table Code value: 96 max value in memory 2261\n", + "[INFO] [1702983141.236391]: Found primary_key collision in table Code value: 97 max value in memory 2262\n", + "[INFO] [1702983141.237755]: Found primary_key collision in table Code value: 98 max value in memory 2263\n", + "[INFO] [1702983141.239153]: Found primary_key collision in table Code value: 100 max value in memory 2264\n", + "[INFO] [1702983141.240549]: Found primary_key collision in table Code value: 101 max value in memory 2265\n", + "[INFO] [1702983141.242136]: Found primary_key collision in table Code value: 102 max value in memory 2266\n", + "[INFO] [1702983141.243600]: Found primary_key collision in table Code value: 103 max value in memory 2267\n", + "[INFO] [1702983141.245151]: Found primary_key collision in table Code value: 104 max value in memory 2268\n", + "[INFO] [1702983141.246552]: Found primary_key collision in table Code value: 105 max value in memory 2269\n", + "[INFO] [1702983141.247849]: Found primary_key collision in table Code value: 106 max value in memory 2270\n", + "[INFO] [1702983141.249274]: Found primary_key collision in table Code value: 107 max value in memory 2271\n", + "[INFO] [1702983141.250571]: Found primary_key collision in table Code value: 108 max value in memory 2272\n", + "[INFO] [1702983141.251873]: Found primary_key collision in table Code value: 109 max value in memory 2273\n", + "[INFO] [1702983141.253914]: Found primary_key collision in table Code value: 110 max value in memory 2274\n", + "[INFO] [1702983141.255218]: Found primary_key collision in table Code value: 111 max value in memory 2275\n", + "[INFO] [1702983141.256518]: Found primary_key collision in table Code value: 112 max value in memory 2276\n", + "[INFO] [1702983141.257833]: Found primary_key collision in table Code value: 113 max value in memory 2277\n", + "[INFO] [1702983141.259129]: Found primary_key collision in table Code value: 114 max value in memory 2278\n", + "[INFO] [1702983141.260462]: Found primary_key collision in table Code value: 115 max value in memory 2279\n", + "[INFO] [1702983141.261757]: Found primary_key collision in table Code value: 116 max value in memory 2280\n", + "[INFO] [1702983141.263041]: Found primary_key collision in table Code value: 117 max value in memory 2281\n", + "[INFO] [1702983141.282719]: Found primary_key collision in table Pose value: 104 max value in memory 2221\n", + "[INFO] [1702983141.284815]: Found primary_key collision in table Pose value: 105 max value in memory 2222\n", + "[INFO] [1702983141.286346]: Found primary_key collision in table Pose value: 106 max value in memory 2223\n", + "[INFO] [1702983141.287699]: Found primary_key collision in table Pose value: 107 max value in memory 2224\n", + "[INFO] [1702983141.289181]: Found primary_key collision in table Pose value: 108 max value in memory 2225\n", + "[INFO] [1702983141.290734]: Found primary_key collision in table Pose value: 109 max value in memory 2226\n", + "[INFO] [1702983141.294156]: Found primary_key collision in table Pose value: 1 max value in memory 2227\n", + "[INFO] [1702983141.295552]: Found primary_key collision in table Pose value: 2 max value in memory 2228\n", + "[INFO] [1702983141.296952]: Found primary_key collision in table Pose value: 3 max value in memory 2229\n", + "[INFO] [1702983141.298329]: Found primary_key collision in table Pose value: 4 max value in memory 2230\n", + "[INFO] [1702983141.299704]: Found primary_key collision in table Pose value: 5 max value in memory 2231\n", + "[INFO] [1702983141.301085]: Found primary_key collision in table Pose value: 6 max value in memory 2232\n", + "[INFO] [1702983141.302458]: Found primary_key collision in table Pose value: 7 max value in memory 2233\n", + "[INFO] [1702983141.303839]: Found primary_key collision in table Pose value: 8 max value in memory 2234\n", + "[INFO] [1702983141.305592]: Found primary_key collision in table Pose value: 9 max value in memory 2235\n", + "[INFO] [1702983141.307268]: Found primary_key collision in table Pose value: 10 max value in memory 2236\n", + "[INFO] [1702983141.308744]: Found primary_key collision in table Pose value: 11 max value in memory 2237\n", + "[INFO] [1702983141.310133]: Found primary_key collision in table Pose value: 12 max value in memory 2238\n", + "[INFO] [1702983141.311624]: Found primary_key collision in table Pose value: 13 max value in memory 2239\n", + "[INFO] [1702983141.313061]: Found primary_key collision in table Pose value: 14 max value in memory 2240\n", + "[INFO] [1702983141.314437]: Found primary_key collision in table Pose value: 15 max value in memory 2241\n", + "[INFO] [1702983141.315780]: Found primary_key collision in table Pose value: 16 max value in memory 2242\n", + "[INFO] [1702983141.317169]: Found primary_key collision in table Pose value: 17 max value in memory 2243\n", + "[INFO] [1702983141.318581]: Found primary_key collision in table Pose value: 18 max value in memory 2244\n", + "[INFO] [1702983141.319979]: Found primary_key collision in table Pose value: 19 max value in memory 2245\n", + "[INFO] [1702983141.321419]: Found primary_key collision in table Pose value: 20 max value in memory 2246\n", + "[INFO] [1702983141.322928]: Found primary_key collision in table Pose value: 21 max value in memory 2247\n", + "[INFO] [1702983141.324472]: Found primary_key collision in table Pose value: 22 max value in memory 2248\n", + "[INFO] [1702983141.325832]: Found primary_key collision in table Pose value: 23 max value in memory 2249\n", + "[INFO] [1702983141.327389]: Found primary_key collision in table Pose value: 24 max value in memory 2250\n", + "[INFO] [1702983141.329190]: Found primary_key collision in table Pose value: 25 max value in memory 2251\n", + "[INFO] [1702983141.331033]: Found primary_key collision in table Pose value: 26 max value in memory 2252\n", + "[INFO] [1702983141.332608]: Found primary_key collision in table Pose value: 27 max value in memory 2253\n", + "[INFO] [1702983141.334348]: Found primary_key collision in table Pose value: 28 max value in memory 2254\n", + "[INFO] [1702983141.335992]: Found primary_key collision in table Pose value: 29 max value in memory 2255\n", + "[INFO] [1702983141.337676]: Found primary_key collision in table Pose value: 30 max value in memory 2256\n", + "[INFO] [1702983141.339061]: Found primary_key collision in table Pose value: 31 max value in memory 2257\n", + "[INFO] [1702983141.340194]: Found primary_key collision in table Pose value: 32 max value in memory 2258\n", + "[INFO] [1702983141.341306]: Found primary_key collision in table Pose value: 33 max value in memory 2259\n", + "[INFO] [1702983141.342493]: Found primary_key collision in table Pose value: 34 max value in memory 2260\n", + "[INFO] [1702983141.343671]: Found primary_key collision in table Pose value: 35 max value in memory 2261\n", + "[INFO] [1702983141.344848]: Found primary_key collision in table Pose value: 36 max value in memory 2262\n", + "[INFO] [1702983141.346068]: Found primary_key collision in table Pose value: 37 max value in memory 2263\n", + "[INFO] [1702983141.347195]: Found primary_key collision in table Pose value: 38 max value in memory 2264\n", + "[INFO] [1702983141.348558]: Found primary_key collision in table Pose value: 39 max value in memory 2265\n", + "[INFO] [1702983141.349966]: Found primary_key collision in table Pose value: 40 max value in memory 2266\n", + "[INFO] [1702983141.351308]: Found primary_key collision in table Pose value: 41 max value in memory 2267\n", + "[INFO] [1702983141.352673]: Found primary_key collision in table Pose value: 42 max value in memory 2268\n", + "[INFO] [1702983141.354024]: Found primary_key collision in table Pose value: 43 max value in memory 2269\n", + "[INFO] [1702983141.355370]: Found primary_key collision in table Pose value: 44 max value in memory 2270\n", + "[INFO] [1702983141.356941]: Found primary_key collision in table Pose value: 45 max value in memory 2271\n", + "[INFO] [1702983141.358344]: Found primary_key collision in table Pose value: 46 max value in memory 2272\n", + "[INFO] [1702983141.359674]: Found primary_key collision in table Pose value: 47 max value in memory 2273\n", + "[INFO] [1702983141.361128]: Found primary_key collision in table Pose value: 48 max value in memory 2274\n", + "[INFO] [1702983141.362496]: Found primary_key collision in table Pose value: 49 max value in memory 2275\n", + "[INFO] [1702983141.363866]: Found primary_key collision in table Pose value: 50 max value in memory 2276\n", + "[INFO] [1702983141.365257]: Found primary_key collision in table Pose value: 51 max value in memory 2277\n", + "[INFO] [1702983141.366621]: Found primary_key collision in table Pose value: 52 max value in memory 2278\n", + "[INFO] [1702983141.367993]: Found primary_key collision in table Pose value: 53 max value in memory 2279\n", + "[INFO] [1702983141.369585]: Found primary_key collision in table Pose value: 54 max value in memory 2280\n", + "[INFO] [1702983141.371029]: Found primary_key collision in table Pose value: 55 max value in memory 2281\n", + "[INFO] [1702983141.372468]: Found primary_key collision in table Pose value: 56 max value in memory 2282\n", + "[INFO] [1702983141.373868]: Found primary_key collision in table Pose value: 57 max value in memory 2283\n", + "[INFO] [1702983141.375313]: Found primary_key collision in table Pose value: 58 max value in memory 2284\n", + "[INFO] [1702983141.376772]: Found primary_key collision in table Pose value: 59 max value in memory 2285\n", + "[INFO] [1702983141.378164]: Found primary_key collision in table Pose value: 60 max value in memory 2286\n", + "[INFO] [1702983141.379555]: Found primary_key collision in table Pose value: 61 max value in memory 2287\n", + "[INFO] [1702983141.380974]: Found primary_key collision in table Pose value: 62 max value in memory 2288\n", + "[INFO] [1702983141.382690]: Found primary_key collision in table Pose value: 63 max value in memory 2289\n", + "[INFO] [1702983141.384348]: Found primary_key collision in table Pose value: 64 max value in memory 2290\n", + "[INFO] [1702983141.385754]: Found primary_key collision in table Pose value: 65 max value in memory 2291\n", + "[INFO] [1702983141.387141]: Found primary_key collision in table Pose value: 66 max value in memory 2292\n", + "[INFO] [1702983141.388516]: Found primary_key collision in table Pose value: 67 max value in memory 2293\n", + "[INFO] [1702983141.389944]: Found primary_key collision in table Pose value: 68 max value in memory 2294\n", + "[INFO] [1702983141.391337]: Found primary_key collision in table Pose value: 69 max value in memory 2295\n", + "[INFO] [1702983141.392718]: Found primary_key collision in table Pose value: 70 max value in memory 2296\n", + "[INFO] [1702983141.394100]: Found primary_key collision in table Pose value: 71 max value in memory 2297\n", + "[INFO] [1702983141.395546]: Found primary_key collision in table Pose value: 72 max value in memory 2298\n", + "[INFO] [1702983141.396934]: Found primary_key collision in table Pose value: 73 max value in memory 2299\n", + "[INFO] [1702983141.398365]: Found primary_key collision in table Pose value: 74 max value in memory 2300\n", + "[INFO] [1702983141.399726]: Found primary_key collision in table Pose value: 75 max value in memory 2301\n", + "[INFO] [1702983141.401153]: Found primary_key collision in table Pose value: 76 max value in memory 2302\n", + "[INFO] [1702983141.402524]: Found primary_key collision in table Pose value: 77 max value in memory 2303\n", + "[INFO] [1702983141.403937]: Found primary_key collision in table Pose value: 78 max value in memory 2304\n", + "[INFO] [1702983141.405444]: Found primary_key collision in table Pose value: 79 max value in memory 2305\n", + "[INFO] [1702983141.406863]: Found primary_key collision in table Pose value: 80 max value in memory 2306\n", + "[INFO] [1702983141.408277]: Found primary_key collision in table Pose value: 81 max value in memory 2307\n", + "[INFO] [1702983141.409698]: Found primary_key collision in table Pose value: 82 max value in memory 2308\n", + "[INFO] [1702983141.411084]: Found primary_key collision in table Pose value: 83 max value in memory 2309\n", + "[INFO] [1702983141.412926]: Found primary_key collision in table Pose value: 84 max value in memory 2310\n", + "[INFO] [1702983141.414299]: Found primary_key collision in table Pose value: 85 max value in memory 2311\n", + "[INFO] [1702983141.415661]: Found primary_key collision in table Pose value: 86 max value in memory 2312\n", + "[INFO] [1702983141.417256]: Found primary_key collision in table Pose value: 87 max value in memory 2313\n", + "[INFO] [1702983141.418627]: Found primary_key collision in table Pose value: 88 max value in memory 2314\n", + "[INFO] [1702983141.419992]: Found primary_key collision in table Pose value: 89 max value in memory 2315\n", + "[INFO] [1702983141.421392]: Found primary_key collision in table Pose value: 90 max value in memory 2316\n", + "[INFO] [1702983141.422773]: Found primary_key collision in table Pose value: 91 max value in memory 2317\n", + "[INFO] [1702983141.424221]: Found primary_key collision in table Pose value: 92 max value in memory 2318\n", + "[INFO] [1702983141.425601]: Found primary_key collision in table Pose value: 93 max value in memory 2319\n", + "[INFO] [1702983141.426990]: Found primary_key collision in table Pose value: 94 max value in memory 2320\n", + "[INFO] [1702983141.428366]: Found primary_key collision in table Pose value: 95 max value in memory 2321\n", + "[INFO] [1702983141.429733]: Found primary_key collision in table Pose value: 96 max value in memory 2322\n", + "[INFO] [1702983141.431120]: Found primary_key collision in table Pose value: 97 max value in memory 2323\n", + "[INFO] [1702983141.432565]: Found primary_key collision in table Pose value: 98 max value in memory 2324\n", + "[INFO] [1702983141.433939]: Found primary_key collision in table Pose value: 99 max value in memory 2325\n", + "[INFO] [1702983141.435302]: Found primary_key collision in table Pose value: 100 max value in memory 2326\n", + "[INFO] [1702983141.436674]: Found primary_key collision in table Pose value: 101 max value in memory 2327\n", + "[INFO] [1702983141.438158]: Found primary_key collision in table Pose value: 102 max value in memory 2328\n", + "[INFO] [1702983141.439639]: Found primary_key collision in table Pose value: 103 max value in memory 2329\n", + "[INFO] [1702983141.441098]: Found primary_key collision in table Pose value: 110 max value in memory 2330\n", + "[INFO] [1702983141.442490]: Found primary_key collision in table Pose value: 111 max value in memory 2331\n", + "[INFO] [1702983141.443902]: Found primary_key collision in table Pose value: 112 max value in memory 2332\n", + "[INFO] [1702983141.445372]: Found primary_key collision in table Pose value: 113 max value in memory 2333\n", + "[INFO] [1702983141.446768]: Found primary_key collision in table Pose value: 114 max value in memory 2334\n", + "[INFO] [1702983141.448152]: Found primary_key collision in table Pose value: 115 max value in memory 2335\n", + "[INFO] [1702983141.449548]: Found primary_key collision in table Pose value: 116 max value in memory 2336\n", + "[INFO] [1702983141.450931]: Found primary_key collision in table Pose value: 117 max value in memory 2337\n", + "[INFO] [1702983141.452311]: Found primary_key collision in table Pose value: 118 max value in memory 2338\n", + "[INFO] [1702983141.453662]: Found primary_key collision in table Pose value: 119 max value in memory 2339\n", + "[INFO] [1702983141.454998]: Found primary_key collision in table Pose value: 120 max value in memory 2340\n", + "[INFO] [1702983141.476626]: Found primary_key collision in table Object value: 11 max value in memory 223\n", + "[INFO] [1702983141.479099]: Found primary_key collision in table Object value: 1 max value in memory 224\n", + "[INFO] [1702983141.480560]: Found primary_key collision in table Object value: 2 max value in memory 225\n", + "[INFO] [1702983141.482409]: Found primary_key collision in table Object value: 3 max value in memory 226\n", + "[INFO] [1702983141.484268]: Found primary_key collision in table Object value: 4 max value in memory 227\n", + "[INFO] [1702983141.485847]: Found primary_key collision in table Object value: 5 max value in memory 228\n", + "[INFO] [1702983141.487321]: Found primary_key collision in table Object value: 6 max value in memory 229\n", + "[INFO] [1702983141.488611]: Found primary_key collision in table Object value: 7 max value in memory 230\n", + "[INFO] [1702983141.489894]: Found primary_key collision in table Object value: 8 max value in memory 231\n", + "[INFO] [1702983141.491164]: Found primary_key collision in table Object value: 9 max value in memory 232\n", + "[INFO] [1702983141.492443]: Found primary_key collision in table Object value: 10 max value in memory 233\n", + "[INFO] [1702983141.493731]: Found primary_key collision in table Object value: 12 max value in memory 234\n", + "[INFO] [1702983141.504940]: Found primary_key collision in table RobotState value: 44 max value in memory 889\n", + "[INFO] [1702983141.507209]: Found primary_key collision in table RobotState value: 1 max value in memory 890\n", + "[INFO] [1702983141.508798]: Found primary_key collision in table RobotState value: 2 max value in memory 891\n", + "[INFO] [1702983141.510223]: Found primary_key collision in table RobotState value: 3 max value in memory 892\n", + "[INFO] [1702983141.511511]: Found primary_key collision in table RobotState value: 4 max value in memory 893\n", + "[INFO] [1702983141.512776]: Found primary_key collision in table RobotState value: 5 max value in memory 894\n", + "[INFO] [1702983141.514047]: Found primary_key collision in table RobotState value: 6 max value in memory 895\n", + "[INFO] [1702983141.515297]: Found primary_key collision in table RobotState value: 7 max value in memory 896\n", + "[INFO] [1702983141.516497]: Found primary_key collision in table RobotState value: 8 max value in memory 897\n", + "[INFO] [1702983141.517718]: Found primary_key collision in table RobotState value: 9 max value in memory 898\n", + "[INFO] [1702983141.519063]: Found primary_key collision in table RobotState value: 10 max value in memory 899\n", + "[INFO] [1702983141.520516]: Found primary_key collision in table RobotState value: 11 max value in memory 900\n", + "[INFO] [1702983141.521817]: Found primary_key collision in table RobotState value: 12 max value in memory 901\n", + "[INFO] [1702983141.523295]: Found primary_key collision in table RobotState value: 13 max value in memory 902\n", + "[INFO] [1702983141.524951]: Found primary_key collision in table RobotState value: 14 max value in memory 903\n", + "[INFO] [1702983141.526586]: Found primary_key collision in table RobotState value: 15 max value in memory 904\n", + "[INFO] [1702983141.528196]: Found primary_key collision in table RobotState value: 16 max value in memory 905\n", + "[INFO] [1702983141.529798]: Found primary_key collision in table RobotState value: 17 max value in memory 906\n", + "[INFO] [1702983141.531359]: Found primary_key collision in table RobotState value: 18 max value in memory 907\n", + "[INFO] [1702983141.532957]: Found primary_key collision in table RobotState value: 19 max value in memory 908\n", + "[INFO] [1702983141.534208]: Found primary_key collision in table RobotState value: 20 max value in memory 909\n", + "[INFO] [1702983141.535596]: Found primary_key collision in table RobotState value: 21 max value in memory 910\n", + "[INFO] [1702983141.536886]: Found primary_key collision in table RobotState value: 22 max value in memory 911\n", + "[INFO] [1702983141.538518]: Found primary_key collision in table RobotState value: 23 max value in memory 912\n", + "[INFO] [1702983141.540249]: Found primary_key collision in table RobotState value: 24 max value in memory 913\n", + "[INFO] [1702983141.542006]: Found primary_key collision in table RobotState value: 25 max value in memory 914\n", + "[INFO] [1702983141.543688]: Found primary_key collision in table RobotState value: 26 max value in memory 915\n", + "[INFO] [1702983141.545352]: Found primary_key collision in table RobotState value: 27 max value in memory 916\n", + "[INFO] [1702983141.546910]: Found primary_key collision in table RobotState value: 28 max value in memory 917\n", + "[INFO] [1702983141.548205]: Found primary_key collision in table RobotState value: 29 max value in memory 918\n", + "[INFO] [1702983141.549478]: Found primary_key collision in table RobotState value: 30 max value in memory 919\n", + "[INFO] [1702983141.550742]: Found primary_key collision in table RobotState value: 31 max value in memory 920\n", + "[INFO] [1702983141.552010]: Found primary_key collision in table RobotState value: 32 max value in memory 921\n", + "[INFO] [1702983141.553291]: Found primary_key collision in table RobotState value: 33 max value in memory 922\n", + "[INFO] [1702983141.554597]: Found primary_key collision in table RobotState value: 34 max value in memory 923\n", + "[INFO] [1702983141.555874]: Found primary_key collision in table RobotState value: 35 max value in memory 924\n", + "[INFO] [1702983141.557105]: Found primary_key collision in table RobotState value: 36 max value in memory 925\n", + "[INFO] [1702983141.558276]: Found primary_key collision in table RobotState value: 37 max value in memory 926\n", + "[INFO] [1702983141.559433]: Found primary_key collision in table RobotState value: 38 max value in memory 927\n", + "[INFO] [1702983141.560648]: Found primary_key collision in table RobotState value: 39 max value in memory 928\n", + "[INFO] [1702983141.561815]: Found primary_key collision in table RobotState value: 40 max value in memory 929\n", + "[INFO] [1702983141.562998]: Found primary_key collision in table RobotState value: 41 max value in memory 930\n", + "[INFO] [1702983141.564190]: Found primary_key collision in table RobotState value: 42 max value in memory 931\n", + "[INFO] [1702983141.565479]: Found primary_key collision in table RobotState value: 43 max value in memory 932\n", + "[INFO] [1702983141.566730]: Found primary_key collision in table RobotState value: 45 max value in memory 933\n", + "[INFO] [1702983141.567975]: Found primary_key collision in table RobotState value: 46 max value in memory 934\n", + "[INFO] [1702983141.569290]: Found primary_key collision in table RobotState value: 47 max value in memory 935\n", + "[INFO] [1702983141.570597]: Found primary_key collision in table RobotState value: 48 max value in memory 936\n", + "[INFO] [1702983141.585400]: Found primary_key collision in table TaskTreeNode value: 1 max value in memory 2165\n", + "[INFO] [1702983141.587664]: Found primary_key collision in table TaskTreeNode value: 2 max value in memory 2166\n", + "[INFO] [1702983141.589488]: Found primary_key collision in table TaskTreeNode value: 21 max value in memory 2167\n", + "[INFO] [1702983141.591018]: Found primary_key collision in table TaskTreeNode value: 22 max value in memory 2168\n", + "[INFO] [1702983141.592587]: Found primary_key collision in table TaskTreeNode value: 41 max value in memory 2169\n", + "[INFO] [1702983141.594145]: Found primary_key collision in table TaskTreeNode value: 60 max value in memory 2170\n", + "[INFO] [1702983141.595514]: Found primary_key collision in table TaskTreeNode value: 61 max value in memory 2171\n", + "[INFO] [1702983141.597373]: Found primary_key collision in table TaskTreeNode value: 3 max value in memory 2172\n", + "[INFO] [1702983141.598804]: Found primary_key collision in table TaskTreeNode value: 4 max value in memory 2173\n", + "[INFO] [1702983141.600162]: Found primary_key collision in table TaskTreeNode value: 5 max value in memory 2174\n", + "[INFO] [1702983141.601508]: Found primary_key collision in table TaskTreeNode value: 6 max value in memory 2175\n", + "[INFO] [1702983141.602909]: Found primary_key collision in table TaskTreeNode value: 7 max value in memory 2176\n", + "[INFO] [1702983141.604420]: Found primary_key collision in table TaskTreeNode value: 8 max value in memory 2177\n", + "[INFO] [1702983141.605931]: Found primary_key collision in table TaskTreeNode value: 9 max value in memory 2178\n", + "[INFO] [1702983141.607299]: Found primary_key collision in table TaskTreeNode value: 10 max value in memory 2179\n", + "[INFO] [1702983141.608654]: Found primary_key collision in table TaskTreeNode value: 11 max value in memory 2180\n", + "[INFO] [1702983141.610231]: Found primary_key collision in table TaskTreeNode value: 12 max value in memory 2181\n", + "[INFO] [1702983141.611811]: Found primary_key collision in table TaskTreeNode value: 13 max value in memory 2182\n", + "[INFO] [1702983141.613328]: Found primary_key collision in table TaskTreeNode value: 14 max value in memory 2183\n", + "[INFO] [1702983141.614797]: Found primary_key collision in table TaskTreeNode value: 15 max value in memory 2184\n", + "[INFO] [1702983141.616238]: Found primary_key collision in table TaskTreeNode value: 16 max value in memory 2185\n", + "[INFO] [1702983141.617742]: Found primary_key collision in table TaskTreeNode value: 17 max value in memory 2186\n", + "[INFO] [1702983141.619210]: Found primary_key collision in table TaskTreeNode value: 18 max value in memory 2187\n", + "[INFO] [1702983141.620724]: Found primary_key collision in table TaskTreeNode value: 19 max value in memory 2188\n", + "[INFO] [1702983141.622019]: Found primary_key collision in table TaskTreeNode value: 20 max value in memory 2189\n", + "[INFO] [1702983141.623241]: Found primary_key collision in table TaskTreeNode value: 23 max value in memory 2190\n", + "[INFO] [1702983141.624627]: Found primary_key collision in table TaskTreeNode value: 25 max value in memory 2191\n", + "[INFO] [1702983141.626490]: Found primary_key collision in table TaskTreeNode value: 26 max value in memory 2192\n", + "[INFO] [1702983141.627821]: Found primary_key collision in table TaskTreeNode value: 27 max value in memory 2193\n", + "[INFO] [1702983141.629475]: Found primary_key collision in table TaskTreeNode value: 28 max value in memory 2194\n", + "[INFO] [1702983141.631025]: Found primary_key collision in table TaskTreeNode value: 29 max value in memory 2195\n", + "[INFO] [1702983141.632535]: Found primary_key collision in table TaskTreeNode value: 30 max value in memory 2196\n", + "[INFO] [1702983141.634051]: Found primary_key collision in table TaskTreeNode value: 31 max value in memory 2197\n", + "[INFO] [1702983141.635555]: Found primary_key collision in table TaskTreeNode value: 32 max value in memory 2198\n", + "[INFO] [1702983141.636987]: Found primary_key collision in table TaskTreeNode value: 33 max value in memory 2199\n", + "[INFO] [1702983141.638620]: Found primary_key collision in table TaskTreeNode value: 34 max value in memory 2200\n", + "[INFO] [1702983141.640110]: Found primary_key collision in table TaskTreeNode value: 35 max value in memory 2201\n", + "[INFO] [1702983141.641553]: Found primary_key collision in table TaskTreeNode value: 36 max value in memory 2202\n", + "[INFO] [1702983141.643102]: Found primary_key collision in table TaskTreeNode value: 37 max value in memory 2203\n", + "[INFO] [1702983141.644543]: Found primary_key collision in table TaskTreeNode value: 38 max value in memory 2204\n", + "[INFO] [1702983141.645966]: Found primary_key collision in table TaskTreeNode value: 39 max value in memory 2205\n", + "[INFO] [1702983141.647556]: Found primary_key collision in table TaskTreeNode value: 40 max value in memory 2206\n", + "[INFO] [1702983141.649023]: Found primary_key collision in table TaskTreeNode value: 42 max value in memory 2207\n", + "[INFO] [1702983141.650366]: Found primary_key collision in table TaskTreeNode value: 43 max value in memory 2208\n", + "[INFO] [1702983141.651679]: Found primary_key collision in table TaskTreeNode value: 44 max value in memory 2209\n", + "[INFO] [1702983141.653207]: Found primary_key collision in table TaskTreeNode value: 45 max value in memory 2210\n", + "[INFO] [1702983141.654582]: Found primary_key collision in table TaskTreeNode value: 46 max value in memory 2211\n", + "[INFO] [1702983141.656107]: Found primary_key collision in table TaskTreeNode value: 47 max value in memory 2212\n", + "[INFO] [1702983141.657613]: Found primary_key collision in table TaskTreeNode value: 48 max value in memory 2213\n", + "[INFO] [1702983141.659037]: Found primary_key collision in table TaskTreeNode value: 49 max value in memory 2214\n", + "[INFO] [1702983141.660518]: Found primary_key collision in table TaskTreeNode value: 50 max value in memory 2215\n", + "[INFO] [1702983141.662003]: Found primary_key collision in table TaskTreeNode value: 51 max value in memory 2216\n", + "[INFO] [1702983141.663416]: Found primary_key collision in table TaskTreeNode value: 52 max value in memory 2217\n", + "[INFO] [1702983141.664814]: Found primary_key collision in table TaskTreeNode value: 53 max value in memory 2218\n", + "[INFO] [1702983141.666370]: Found primary_key collision in table TaskTreeNode value: 54 max value in memory 2219\n", + "[INFO] [1702983141.667813]: Found primary_key collision in table TaskTreeNode value: 55 max value in memory 2220\n", + "[INFO] [1702983141.669267]: Found primary_key collision in table TaskTreeNode value: 56 max value in memory 2221\n", + "[INFO] [1702983141.670597]: Found primary_key collision in table TaskTreeNode value: 57 max value in memory 2222\n", + "[INFO] [1702983141.672418]: Found primary_key collision in table TaskTreeNode value: 58 max value in memory 2223\n", + "[INFO] [1702983141.673928]: Found primary_key collision in table TaskTreeNode value: 59 max value in memory 2224\n", + "[INFO] [1702983141.675638]: Found primary_key collision in table TaskTreeNode value: 62 max value in memory 2225\n", + "[INFO] [1702983141.677115]: Found primary_key collision in table TaskTreeNode value: 63 max value in memory 2226\n", + "[INFO] [1702983141.678431]: Found primary_key collision in table TaskTreeNode value: 64 max value in memory 2227\n", + "[INFO] [1702983141.679759]: Found primary_key collision in table TaskTreeNode value: 65 max value in memory 2228\n", + "[INFO] [1702983141.681187]: Found primary_key collision in table TaskTreeNode value: 24 max value in memory 2229\n", + "[INFO] [1702983141.686399]: Found primary_key collision in table TaskTreeNode value: 80 max value in memory 2230\n", + "[INFO] [1702983141.688126]: Found primary_key collision in table TaskTreeNode value: 99 max value in memory 2231\n", + "[INFO] [1702983141.690083]: Found primary_key collision in table TaskTreeNode value: 66 max value in memory 2232\n", + "[INFO] [1702983141.691794]: Found primary_key collision in table TaskTreeNode value: 67 max value in memory 2233\n", + "[INFO] [1702983141.693514]: Found primary_key collision in table TaskTreeNode value: 68 max value in memory 2234\n", + "[INFO] [1702983141.694839]: Found primary_key collision in table TaskTreeNode value: 69 max value in memory 2235\n", + "[INFO] [1702983141.696450]: Found primary_key collision in table TaskTreeNode value: 70 max value in memory 2236\n", + "[INFO] [1702983141.698000]: Found primary_key collision in table TaskTreeNode value: 71 max value in memory 2237\n", + "[INFO] [1702983141.699522]: Found primary_key collision in table TaskTreeNode value: 72 max value in memory 2238\n", + "[INFO] [1702983141.701004]: Found primary_key collision in table TaskTreeNode value: 73 max value in memory 2239\n", + "[INFO] [1702983141.702406]: Found primary_key collision in table TaskTreeNode value: 74 max value in memory 2240\n", + "[INFO] [1702983141.703714]: Found primary_key collision in table TaskTreeNode value: 75 max value in memory 2241\n", + "[INFO] [1702983141.705336]: Found primary_key collision in table TaskTreeNode value: 76 max value in memory 2242\n", + "[INFO] [1702983141.706756]: Found primary_key collision in table TaskTreeNode value: 77 max value in memory 2243\n", + "[INFO] [1702983141.708212]: Found primary_key collision in table TaskTreeNode value: 78 max value in memory 2244\n", + "[INFO] [1702983141.709671]: Found primary_key collision in table TaskTreeNode value: 79 max value in memory 2245\n", + "[INFO] [1702983141.711140]: Found primary_key collision in table TaskTreeNode value: 81 max value in memory 2246\n", + "[INFO] [1702983141.712490]: Found primary_key collision in table TaskTreeNode value: 82 max value in memory 2247\n", + "[INFO] [1702983141.713899]: Found primary_key collision in table TaskTreeNode value: 83 max value in memory 2248\n", + "[INFO] [1702983141.715286]: Found primary_key collision in table TaskTreeNode value: 84 max value in memory 2249\n", + "[INFO] [1702983141.716646]: Found primary_key collision in table TaskTreeNode value: 85 max value in memory 2250\n", + "[INFO] [1702983141.718064]: Found primary_key collision in table TaskTreeNode value: 86 max value in memory 2251\n", + "[INFO] [1702983141.719503]: Found primary_key collision in table TaskTreeNode value: 87 max value in memory 2252\n", + "[INFO] [1702983141.720819]: Found primary_key collision in table TaskTreeNode value: 88 max value in memory 2253\n", + "[INFO] [1702983141.722142]: Found primary_key collision in table TaskTreeNode value: 89 max value in memory 2254\n", + "[INFO] [1702983141.723453]: Found primary_key collision in table TaskTreeNode value: 90 max value in memory 2255\n", + "[INFO] [1702983141.724818]: Found primary_key collision in table TaskTreeNode value: 91 max value in memory 2256\n", + "[INFO] [1702983141.726517]: Found primary_key collision in table TaskTreeNode value: 92 max value in memory 2257\n", + "[INFO] [1702983141.727923]: Found primary_key collision in table TaskTreeNode value: 93 max value in memory 2258\n", + "[INFO] [1702983141.729253]: Found primary_key collision in table TaskTreeNode value: 94 max value in memory 2259\n", + "[INFO] [1702983141.730654]: Found primary_key collision in table TaskTreeNode value: 95 max value in memory 2260\n", + "[INFO] [1702983141.732088]: Found primary_key collision in table TaskTreeNode value: 96 max value in memory 2261\n", + "[INFO] [1702983141.733676]: Found primary_key collision in table TaskTreeNode value: 97 max value in memory 2262\n", + "[INFO] [1702983141.735387]: Found primary_key collision in table TaskTreeNode value: 98 max value in memory 2263\n", + "[INFO] [1702983141.737046]: Found primary_key collision in table TaskTreeNode value: 100 max value in memory 2264\n", + "[INFO] [1702983141.738800]: Found primary_key collision in table TaskTreeNode value: 101 max value in memory 2265\n", + "[INFO] [1702983141.740422]: Found primary_key collision in table TaskTreeNode value: 102 max value in memory 2266\n", + "[INFO] [1702983141.742202]: Found primary_key collision in table TaskTreeNode value: 103 max value in memory 2267\n", + "[INFO] [1702983141.743893]: Found primary_key collision in table TaskTreeNode value: 104 max value in memory 2268\n", + "[INFO] [1702983141.745732]: Found primary_key collision in table TaskTreeNode value: 105 max value in memory 2269\n", + "[INFO] [1702983141.747544]: Found primary_key collision in table TaskTreeNode value: 106 max value in memory 2270\n", + "[INFO] [1702983141.748964]: Found primary_key collision in table TaskTreeNode value: 107 max value in memory 2271\n", + "[INFO] [1702983141.750298]: Found primary_key collision in table TaskTreeNode value: 108 max value in memory 2272\n", + "[INFO] [1702983141.751606]: Found primary_key collision in table TaskTreeNode value: 109 max value in memory 2273\n", + "[INFO] [1702983141.752909]: Found primary_key collision in table TaskTreeNode value: 110 max value in memory 2274\n", + "[INFO] [1702983141.754252]: Found primary_key collision in table TaskTreeNode value: 111 max value in memory 2275\n", + "[INFO] [1702983141.755623]: Found primary_key collision in table TaskTreeNode value: 112 max value in memory 2276\n", + "[INFO] [1702983141.757048]: Found primary_key collision in table TaskTreeNode value: 113 max value in memory 2277\n", + "[INFO] [1702983141.758515]: Found primary_key collision in table TaskTreeNode value: 114 max value in memory 2278\n", + "[INFO] [1702983141.759985]: Found primary_key collision in table TaskTreeNode value: 115 max value in memory 2279\n", + "[INFO] [1702983141.761436]: Found primary_key collision in table TaskTreeNode value: 116 max value in memory 2280\n", + "[INFO] [1702983141.762921]: Found primary_key collision in table TaskTreeNode value: 117 max value in memory 2281\n" ] } ], @@ -1051,9 +1089,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 6, "id": "e0e50ba7", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2023-12-19T10:52:27.864687278Z", + "start_time": "2023-12-19T10:52:27.860301559Z" + } + }, "outputs": [ { "name": "stdout", @@ -1108,9 +1151,15 @@ "(datetime.datetime(2023, 12, 11, 11, 4, 4), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '96c94164939638dd2eda3d2bbf750dd552715d5f', 50)\n", "(datetime.datetime(2023, 12, 11, 11, 4, 15), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '96c94164939638dd2eda3d2bbf750dd552715d5f', 51)\n", "(datetime.datetime(2023, 12, 11, 11, 4, 26), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '96c94164939638dd2eda3d2bbf750dd552715d5f', 52)\n", - "(datetime.datetime(2023, 12, 18, 9, 39, 36), 'nleusmann', 'Example Plan 0', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 1)\n", - "(datetime.datetime(2023, 12, 18, 9, 39, 48), 'nleusmann', 'Example Plan 1', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 2)\n", - "(datetime.datetime(2023, 12, 18, 9, 39, 59), 'nleusmann', 'Example Plan 2', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 3)\n" + "(datetime.datetime(2023, 12, 18, 9, 39, 36), 'nleusmann', 'Example Plan 0', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 53)\n", + "(datetime.datetime(2023, 12, 18, 9, 39, 48), 'nleusmann', 'Example Plan 1', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 54)\n", + "(datetime.datetime(2023, 12, 18, 9, 39, 59), 'nleusmann', 'Example Plan 2', 'e2e4e75b71e621a0ad569b9c828bd0b6d11abfe7', 55)\n", + "(datetime.datetime(2023, 12, 19, 10, 2, 17), 'nleusmann', 'Database merger Unittest: Example pick and place 0', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 56)\n", + "(datetime.datetime(2023, 12, 19, 10, 2, 29), 'nleusmann', 'Database merger Unittest: Example pick and place 1', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 57)\n", + "(datetime.datetime(2023, 12, 19, 10, 2, 40), 'nleusmann', 'Database merger Unittest: Example pick and place 2', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 58)\n", + "(datetime.datetime(2023, 12, 19, 10, 51, 47), 'nleusmann', 'Example Plan 0', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 1)\n", + "(datetime.datetime(2023, 12, 19, 10, 51, 58), 'nleusmann', 'Example Plan 1', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 2)\n", + "(datetime.datetime(2023, 12, 19, 10, 52, 10), 'nleusmann', 'Example Plan 2', '54c6b1241a5c305e5ccd55bbcb742e3b986dbce5', 3)\n" ] } ], @@ -1135,9 +1184,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "name": "pycram", "language": "python", - "name": "python3" + "display_name": "pycram" }, "language_info": { "codemirror_mode": {