"(sqlite3.IntegrityError) FOREIGN KEY constraint failed\n[SQL DELETE FROM services_iscsitarget WHERE services_iscsitarget.id = ?]\n[parameters (2,)]\n(Background on this error at http//sqlalche.me/e/gkpj)", "traceback" "Traceback (most recent call last)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1247, in execute_context\n self.dialect.do_execute(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py\", line 590, in do_execute\n cursor.execute(statement, parameters)\nsqlite3.IntegrityError FOREIGN KEY constraint failed\n\nThe above exception was the direct cause of the following exception\n\nTraceback (most recent call last)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/restful.py\", line 575, in do\n result = await self.middleware.call(methodname, *method_args, **method_kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/service.py\", line 506, in delete\n rv = await self.middleware._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/pool.py\", line 3279, in do_delete\n await delegate.delete(attachments)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/iscsi.py\", line 1657, in delete\n await self.middleware.call('iscsi.target.delete', target_id, True)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/service.py\", line 506, in delete\n rv = await self.middleware._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/iscsi.py\", line 1415, in do_delete\n rv = await self.middleware.call('datastore.delete', self._config.datastore, id)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/write.py\", line 134, in delete\n await self.middleware.call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/connection.py\", line 65, in execute_write\n return await self.middleware.run_in_executor(self.thread_pool, self._execute_write, sql, binds,\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1113, in run_in_executor\n return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))\n File \"/usr/local/lib/python3.9/concurrent/futures/thread.py\", line 52, in run\n result = self.fn(*self.args, **self.kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/connection.py\", line 69, in _execute_write\n result = self.connection.execute(sql, binds)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 976, in execute\n return self._execute_text(object, multiparams, params)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1145, in execute_text\n ret = self._execute_context(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1287, in _execute_context\n self._handle_dbapi_exception(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1481, in _handle_dbapi_exception\n util.raise(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py\", line 178, in raise_\n raise exception\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1247, in _execute_context\n self.dialect.do_execute(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py\", line 590, in do_execute\n cursor.execute(statement, parameters)\nsqlalchemy.exc.IntegrityError (sqlite3.IntegrityError) FOREIGN KEY constraint failed\n[SQL DELETE FROM services_iscsitarget WHERE services_iscsitarget.id = ?]\n[parameters (2,)]\n(Background on this error at http//sqlalche.me/e/gkpj)\n"
First I'll draw attention to the escaped chars in the API response. I saw this in 12.0 stable. The target must be in use since the service is running, but after talking with Caleb, he said "we're supposed to actually map all the running services to that iscsi extent and reload the service". This was a month ago, and I've been able to enounter it since then.
To reprodce: Create a target while the iSCSI service is running, then try to delete it via the API.
When rolling back a VMFS datastore, the newly created target is deleted. This currently fails, leading the following traceback returned by the DELETE API call ` http://ds-x10-ds01a-itr03-igb0.tn.ixsystems.net/api/v2.0/pool/dataset/id/tank%2Ftestvmfs01 `
"(sqlite3.IntegrityError) FOREIGN KEY constraint failed\n[SQL DELETE FROM services_iscsitarget WHERE services_iscsitarget.id = ?]\n[parameters (2,)]\n(Background on this error at http//sqlalche.me/e/gkpj)", "traceback" "Traceback (most recent call last)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1247, in execute_context\n self.dialect.do_execute(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py\", line 590, in do_execute\n cursor.execute(statement, parameters)\nsqlite3.IntegrityError FOREIGN KEY constraint failed\n\nThe above exception was the direct cause of the following exception\n\nTraceback (most recent call last)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/restful.py\", line 575, in do\n result = await self.middleware.call(methodname, *method_args, **method_kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/service.py\", line 506, in delete\n rv = await self.middleware._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/pool.py\", line 3279, in do_delete\n await delegate.delete(attachments)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/iscsi.py\", line 1657, in delete\n await self.middleware.call('iscsi.target.delete', target_id, True)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/service.py\", line 506, in delete\n rv = await self.middleware._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/iscsi.py\", line 1415, in do_delete\n rv = await self.middleware.call('datastore.delete', self._config.datastore, id)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/schema.py\", line 973, in nf\n return await f(*args, **kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/write.py\", line 134, in delete\n await self.middleware.call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1241, in call\n return await self._call(\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1198, in _call\n return await methodobj(*prepared_call.args)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/connection.py\", line 65, in execute_write\n return await self.middleware.run_in_executor(self.thread_pool, self._execute_write, sql, binds,\n File \"/usr/local/lib/python3.9/site-packages/middlewared/main.py\", line 1113, in run_in_executor\n return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))\n File \"/usr/local/lib/python3.9/concurrent/futures/thread.py\", line 52, in run\n result = self.fn(*self.args, **self.kwargs)\n File \"/usr/local/lib/python3.9/site-packages/middlewared/plugins/datastore/connection.py\", line 69, in _execute_write\n result = self.connection.execute(sql, binds)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 976, in execute\n return self._execute_text(object, multiparams, params)\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1145, in execute_text\n ret = self._execute_context(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1287, in _execute_context\n self._handle_dbapi_exception(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1481, in _handle_dbapi_exception\n util.raise(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py\", line 178, in raise_\n raise exception\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py\", line 1247, in _execute_context\n self.dialect.do_execute(\n File \"/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py\", line 590, in do_execute\n cursor.execute(statement, parameters)\nsqlalchemy.exc.IntegrityError (sqlite3.IntegrityError) FOREIGN KEY constraint failed\n[SQL DELETE FROM services_iscsitarget WHERE services_iscsitarget.id = ?]\n[parameters (2,)]\n(Background on this error at http//sqlalche.me/e/gkpj)\n"
First I'll draw attention to the escaped chars in the API response. I saw this in 12.0 stable. The target must be in use since the service is running, but after talking with Caleb, he said "we're supposed to actually map all the running services to that iscsi extent and reload the service". This was a month ago, and I've been able to enounter it since then.
To reprodce: Create a target while the iSCSI service is running, then try to delete it via the API.