example failure: https://app.circleci.com/pipelines/github/snarfed/oauth-dropins/90/workflows/2fb906b4-78f4-45d7-ad4d-46ed9d28b878/jobs/516
full error log:
```
Running setup.py install for grpcio ... error
Complete output from command /root/project/local3/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-2x6fpemn/grpcio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-tmyhem3j/install-record.txt --single-version-externally-managed --compile --install-headers /root/project/local3/include/site/python3.7/grpcio:
Cython-generated files are missing...
We could not find Cython. Setup may take 10-20 minutes.
WARNING: The wheel package is not available.
...
Traceback (most recent call last):
File "/tmp/pip-install-mlr1xc5w/grpcio/src/python/grpcio/commands.py", line 264, in build_extensions
build_ext.build_ext.build_extensions(self)
File "/usr/lib/python3.7/distutils/command/build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "/usr/lib/python3.7/distutils/command/build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "/root/project/local3/lib/python3.7/site-packages/setuptools/command/build_ext.py", line 200, in build_extension
if ext._needs_stub:
AttributeError: 'Extension' object has no attribute '_needs_stub'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-mlr1xc5w/grpcio/setup.py", line 465, in <module>
cmdclass=COMMAND_CLASS,
File "/root/project/local3/lib/python3.7/site-packages/setuptools/__init__.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.7/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.7/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/project/local3/lib/python3.7/site-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/usr/lib/python3.7/distutils/command/install.py", line 589, in run
self.run_command('build')
File "/usr/lib/python3.7/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/usr/lib/python3.7/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/usr/lib/python3.7/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/project/local3/lib/python3.7/site-packages/setuptools/command/build_ext.py", line 78, in run
_build_ext.run(self)
File "/usr/lib/python3.7/distutils/command/build_ext.py", line 340, in run
self.build_extensions()
File "/tmp/pip-install-mlr1xc5w/grpcio/src/python/grpcio/commands.py", line 267, in build_extensions
support.diagnose_build_ext_error(self, error, formatted_exception)
File "/tmp/pip-install-mlr1xc5w/grpcio/src/python/grpcio/support.py", line 118, in diagnose_build_ext_error
diagnostic(build_ext, error)
File "/tmp/pip-install-mlr1xc5w/grpcio/src/python/grpcio/support.py", line 98, in diagnose_attribute_error
"We expect a missing `_needs_stub` attribute from older versions of "
commands.CommandError: We expect a missing `_needs_stub` attribute from older versions of setuptools. Consider upgrading setuptools.
----------------------------------------
Command "/root/project/local3/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-mlr1xc5w/grpcio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-grvcioh0/install-record.txt --single-version-externally-managed --compile --install-headers /root/project/local3/include/site/python3.7/grpcio" failed with error code 1 in /tmp/pip-install-mlr1xc5w/grpcio/
```
mastodon.social sends Deletes for every Bridgy Fed account, all at basically the same time, and we have many Follower objects, so we have to do this table scan for each one, so the requests take a long time and end up spawning extra App Engine instances that we get billed for. and the Delete requests are almost never for followers we have. TODO: revisit this and do it right.