Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Defunct wal-redo processes #2761

Closed
kelvich opened this issue Nov 5, 2022 · 8 comments · Fixed by #2776
Closed

Defunct wal-redo processes #2761

kelvich opened this issue Nov 5, 2022 · 8 comments · Fixed by #2776
Assignees
Labels
t/bug Issue Type: Bug

Comments

@kelvich
Copy link
Contributor

kelvich commented Nov 5, 2022

Currently on prod:

$ ps wuax | grep postgres | grep defunct | wc -l
7209
@kelvich kelvich added the t/bug Issue Type: Bug label Nov 5, 2022
@problame problame self-assigned this Nov 7, 2022
@problame
Copy link
Contributor

problame commented Nov 7, 2022

Looking into this.

@problame
Copy link
Contributor

problame commented Nov 7, 2022

My best lead on this is the following scenario:

  1. Create tenant struct
  2. Create timeline struct
  3. Do one WAL redo, so that the process gets spawned
  4. drop timeline struct
  5. drop tenant struct

Since we keep each tenant's PostgresRedoProcess in an Arc, step 5 will call Drop::drop on the PostgresRedoProcess, which does the following:
6. drop in-memory struct PostgresRedoProcess::child: Child (dropping a Child doesn't kill / wait on anything)
7. drop PostgresRedoProcess::stdin ChildStin, and all the other FDs. Since they're just FDs, dropping them will cause a close() call to the pipe FDs.

Step 7 will cause a SIGPIPE / EPIPE in the wal-redo process. It will exit.

But the pageserver doesn't wait() for the wal-redo process. In fact, we've already dropped our handle to it, i.e., PostgresRedoProcess::child.
So we get a zombie process.

Validating the hypothesis

TBD. Do we need to? Seems pretty obvious to me.

Fixing the problem

Approach 1 (quick fix)

We can add a Drop impl to PostgresRedoProcess that will kill & wait the child process.
The problem with that is that Drop is supposed to be infallible.
But wait & kill can fail.
And further, it can take a good amount of time if the system is really busy.
It'll probably work well with how we use PostgresRedoProcess today.
But there might be problems in the future.

Approach 2 (more robust, long-term maintainable)

The alternative I have in mind: Handle pattern.
The idea is that we have a separate OS thread per redo process.
Clients of the redo process go through a Handle object which they use to request wal redo from the redo thread.
Redo thread takes care of spawning communicate with the redo thread.
that takes care of properly killing it.

Usage:

# create tenant
let handle = PostgresRedoProcess::new();
Tenant {
  redo_process: handle,
}

# create timeline
Timeline {
  redo_process: tenant.redo_process.clone()
}

# use handle in timeline code
timeline.redo_process.apply_wal_records()

Implementation sketch:

fn PostgresRedoProcess::new():

  sender, receiver = make mpsc channel

  process_manager_thread = thread::spawn(|| {
    child_process = None
    loop {
      request = match receiver.recv() {
        Ok(request) => request,
        Err(all sender are gone) => {
            child_process.kill();
            return;
        }
        Err(x) => log and continue,
      };

      if child is Some and has exited:
        log error about unexpected exit
        child = None
      if child.is_none():
        child = spawn child process

      res = child_process.apply_wal_records_impl # what the current function does

      request.response_sender.send(res)
    }  # end loop
  }); # end thread closure

  # the thread will exit when the child exits or if the last Handle is dropped
  drop(process_manager_thread);

  return Handle {
    sender,
  }

fn Handle::clone(self) { Handle { sender: self.sender.clone() }}

fn Handle::apply_wal_records(args...):
  response_sender, response_receiver = channel()
  self.sender.send(Request { response_sender, args... })
  response_receiver.recv()

If we think threads are too heavyweight, I guess I could have a look at ways to do it in async Rust.


Opinions, @hlinnaka ? (he wrote the current implementation)

@hlinnaka
Copy link
Contributor

hlinnaka commented Nov 7, 2022

Some things to consider:

  • We're just discussing how we could speed up the communication between pageserver and the walredo process. See Increase WAL redo speed #1339. This has been in the backburner, but Konstantin's recent testing shows that it's a bottleneck in our sequential scan speed so we will need to address it soon. So we need to be careful with any overhead here, this is very latency sensitive codepath. mspc is fast, and there are probably even faster alternatives in tokio or parking_lot so maybe it's OK, but I'm not sure.

  • Sooner or later, we'll need more to have than 1 wal redo process per tenant. See Have a pool of WAL redo processes #807. We've been putting off doing that too, but I think soon we'll need to. We' should probably also have a timeout or something, to kill WAL redo processes that are not being actively used, to keep the number of processes in check.

  • This is somewhat similar to the problems we've been having with dropping Tenants and Timelines, see Tenant guard object #2705 and the RFC. Maybe there's a common approach. @alexstanovoy actually suggested the Actor pattern for that, which is very similar to what you're proposing with the handler thread above. I was pretty skeptical of that for Tenant/Timeline, but it makes more sense for the WAL redo process case, when there is naturally one process to manage. However, if we need to manage a pool of processes, then it gets complicated again.

  • Yeah, should be a tokio Task rather than thread.

@hlinnaka
Copy link
Contributor

hlinnaka commented Nov 7, 2022

The rust Child wait/kill functions are strange. They both take &mut self as the argument, so it's impossible to have one thread/task waiting for it to finish, and kill it from another thread/task. Weird limitation, knowing that the libc waitpid and kill just take a 'pid'.

@problame
Copy link
Contributor

problame commented Nov 7, 2022

Approach 3: Undroppable type

I guess what we want in the short term is a compile error whenever we forget to call fallible cleanup operations.

I found this hack which gives us almost that:
https://www.reddit.com/r/rust/comments/my3ipa/comment/gw0g636/?utm_source=share&utm_medium=web2x&context=3

Basically the idea is that it introduces a marker type whose Drop implementation will refer to a non-existent symbol.
To avoid a linker error, the Drop implementation must not be present in the compiled binary.

So, the recipe is like:

  1. Add the marker type as a member of our undroppable struct, e.g., PostgresRedoProcess::_undroppable: Undroppable
  2. In our fallible cleanup operation (PostgresRedoProcess::kill)
    2.1. consume self & destructure it
    2.2. std::mem::forget the marker type value. That will cause the compiler to omit the Undroppable::drop() call on the marker type value, thereby avoiding the linker error.

@problame
Copy link
Contributor

problame commented Nov 7, 2022

I did a quick experiment with the Undroppable type. The linker error is unactionable. The reason is that the error message about the undefined symbol points to the file where the Undroppable::drop() function is defined. But we want it to point to the location where the Undroppable is dropped.

Here's how the linker error looks like:

$ cargo build --features undroppable-linker-error               
   Compiling proxy v0.1.0 (/home/cs/neon/src/neon-main/proxy)
   Compiling safekeeper v0.1.0 (/home/cs/neon/src/neon-main/safekeeper)
   Compiling pageserver v0.1.0 (/home/cs/neon/src/neon-main/pageserver)
   Compiling control_plane v0.1.0 (/home/cs/neon/src/neon-main/control_plane)
error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m64" "/tmp/rustcnBdEZ3/symbols.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.100u3vgneg7ehukx.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.118ci8cqgmm3v8z9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.11z9qlhx3gejrty3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.126zo1qrvby9d8jm.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.12si0jeqo7mirjyv.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.14vvx61knp3y9iyc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.178ir9q3i0mrhbzc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.18bkko9rj2c5mwi.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.18p4zskiw4x0gg9z.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1apxkf293h6acgbd.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1b0mn48wwkefrqfj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1bthm4b2sach1iwr.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1c1tbolcllcf1mgb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1drze45ftedi5vwt.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ecsc1p2fjmedy4y.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1eennxrnjsys7vlo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ep8axz4kgoblrgy.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1eqr427nvu1ljjmb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ewxzjuuknlxzw6y.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ey948idtv4zsphj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1gsf8s1sx9wc5vfk.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1iiydb8mwbsxitw9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ko2hizjfu4zepc8.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1l0pj3yakoyvhtcn.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1l3dtla3qdsqgmmj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1l94gzi18u52ogs2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1njljrzyh6wdhw60.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1orzepz4gcsk9pqh.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1rz6ddqg1vf2w0bd.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1snhla0nulrffpjt.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1tby9a0vrn6uemdc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1td963p6wa5ttb7c.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1vcvl89cx7o2b4kc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1vtt1z06oiih4yvc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1vx1okc9fng473v5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1w92u8mvue2x0ggc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1wmztnn30fcirzxb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1xns94a8q2rbopd.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1xt6tymybpos2vx5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1ydx9r7j9gm4sg21.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1yurklgk29pyoj4d.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1yvh3ubm48gx85v5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1zfo83ppxbym3cd9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.1zjusnnjpr5avgv2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.20v57gt18yn76k1m.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.21hxdcf4ea6yp6ex.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.268z1oxnaw6yi8f2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.28grh9ivf3tlfikc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.28ynpn93vt61n310.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2abk09ewyww5l9s6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2abx6h719a13awq0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2amzm4h03s6663x5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2b537yye86xh7sha.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2bbjkvu6d78bk24y.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2c16cnmmdwg4mmkp.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2cl92iod8i0t0j42.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2clh0uhgrqriv5jo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2d2ctuazy13myxwg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2e04wisompfhv577.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2ehwoy8mrzk94f5e.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2g1aj1a44xaa6aa6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2g8tmxmpw2a9ssyc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2gfivbyahwcw0qlg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2gtnh3hpiy16it2s.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2hxgc8dz587i3yvq.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2inljyewd7rlvs69.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2iryqgn534jh0mxu.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2iwg68ebcj2o1uyo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2j04xgcb1k0srt6j.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2lhynlzjzjfh1b03.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2licc8ehknnnni3x.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2m2188wy670rlmei.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2nds77oc2hra480z.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2nr0s7c86sc1quw6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2odlaqx0uvlgndr4.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2owmor01kc5z9vh1.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2p3j2cbmm4m4mow0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2pd74ip5kps9rmn7.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2pmg2tlhk5t594d0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2rq7kl05skpsm0kn.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2spc3f8w1buglk1b.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2u3t24rktvix6k2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2uoccigqy2l4qyh3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2vlzx73bvf6j2ijz.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2wj6vo9260oolf1f.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2x52gb2gv56im4mu.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2x7ailhzxp0zmrya.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2xjjhm46vga1m0hb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2zthm8d2q5499wen.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.2zufet52qbjcbayo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.302bvzn1y1zq326q.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.314vddmi221zm0sc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.31e6etp4b1ulzv9s.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.31mntgyk623psglc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3299broly4i8b7iz.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.32q8lh08edtavmox.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.33l7gel5k88upx70.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.33t9vy2q4o73n6fs.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.34ce9vqe91panvw0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3534qrf1hdbpexmh.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.35crgjxwu4zbiwxg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.35d46reo8c6nii26.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.36wcu9xvea6ivvak.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.37y9w1bngdagpzb9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.38hz71fjh91ah8to.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.38jltbtgudd40ko2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.394wyw62rzn8wle9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.39lftmkystd1hxc9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.39y5f3z1zspixnk2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.39z159gx7k64xt74.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3a2xi9ef9pdkt60j.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3a8jtti5ml28o0i6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3ad24culmzd2dsar.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3aw5b7kxg7tyfhqt.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3bpyq21jrkbl8r16.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3bqjvv52cxj8cis5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3c63h44na6o91y2u.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3c7n4e1331qzvw82.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3d2xjmn9hxaso2qx.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3dsnzgzkso7l14bg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3e4uba167t7a39xr.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3egbs615wpyf74an.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3etqh935jw3fp6ln.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3ipzmiqyla03mqhz.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3k1yrsja4fellyl8.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3krwqjbmq4n3ckqr.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3li1efv1hgxnfagq.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3m3d6f40uqv0u2q3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3md0ho9zyeswdoq5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3n1d9buq3hkmca18.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3nxjaw7u641i2czb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3oi2ln481m9lu2dn.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3qz71v9gere0vllg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3sfmyup3ybd1dq4.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3ssbwtoyp4p6ygrm.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3t148hwkzf93c6nt.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3tlvnhnc84soxi0h.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3u4nfg7r73hnnwwg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3u7xwspz6ahx51gk.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3z4u4myr6p83x8b2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.40y3evnmlyknds25.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.413u15x4tnfxfenr.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.41rkwwqudvbcwr8l.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.42f8ffggd5qgqztw.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.43o9b54ihi1yy1tq.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4434hrumweny545b.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.44i9p3mg79mpwa5z.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.44s6bp9qxlaii01u.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.45k5qg5bodkqaf1k.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.46ja5sk5vqrsss7.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.471zgvqizrhgs5ht.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.47e323o0fj7rqea.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.47fky3x52qluaysg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.48rgta34bjfl6qd0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.49gc0v7eixaceoxk.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4a1uv2qejjf5x7x3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4ba6mcarw9k2m8z4.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4bl9c206sfmbjs71.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4cwb6iwq66hvcxhg.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4d1ddy6r58buorhm.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4d9kbjp2z14g10zb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4dbkrxa7m3iw85yp.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4e8sj4jyllpf1s40.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4eij3246yio2nzhk.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4eks1755d28p6nzn.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4el95ua0b8t2rhfi.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4enntu70h3a33th6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4f22bb4ygeqbt0vb.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4f3sgqtjl7mn6izd.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4f4ugjux62nd18he.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4fjudk6f35yy7tz6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4h5ywllrudlt6oek.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4hdmo4e6ktz4ohaj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4hquamz98j3r2vx7.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4k738i0daqu9xbx8.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4kq9piyo0zfqvtwj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4l9p3d5akgbvsd26.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4lwpzveyvzsok39m.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4m2dmlwjd6wz2iap.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4mioee2dyrskh25f.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4o2vpkogx2yhtzza.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4ovdujru42czq6i2.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4q5a0hl4czul8uy6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4shdj56ef3i709f5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4wqjt8hkq3zhxswq.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4xg7d412xqwpw69w.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4xvahpvqkvgd9y1p.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4yndbpp3weskjhk7.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4ytbqxjkuzdwxsy6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.4zrw00jqveva8kyf.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.50bpt47gymkx99tc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.50hliabix6sl31t8.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.518kmdqpg0xweqqv.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.528u65t41wj1nr3o.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5317in6exatcst2m.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.56i11j16r3drtu0a.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.57gtrt8fd3cbwqvh.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.57r69wrlgah0df7t.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.587owmprg9a71j6f.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5akjdgfb0g4lcfuy.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5aurfuy1asyqf8uo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5cn11xaximhz86wf.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5cpinv54mtt0t2s7.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5cwpamhsef98dh69.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5d4gu1x3sce2ur0u.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5dh7wphfqcctiukf.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5dkrfmjzg5c2dpo0.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5folrhp7hqu806be.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5fviszcojmnw3jh4.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.5nb039z01ym8wog.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.71x0pdy0v1ybwfw.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.7gyfgmdtvshmkae.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.7v0jrztg4wvk8xr.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.8qpxf7hdqmkuxcv.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.9j5ynxiojq4os2q.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.9mi9zyvmrbmczjo.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.buo2nggydkizk9t.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.d95kx3rv5ei2zpx.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.df9cveojhabn9ea.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.dff57k875ktacbf.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.dyqv0k2h12b951t.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.dz7rcyvzas9jha8.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.e16vctgopfeigv5.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.elb5s8mm03tubfc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.empon30i4fynp8u.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.fimxduuxiju23w1.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.gla1br8y55aaw7n.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.hpoiyfu3cchskoh.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.igm2bpjfxn2kxgk.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.jh9j2g8vm32zmnj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.jpemw9wwg0v819m.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.kezbabuc0a7gda4.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.l6wjylzudpssafj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.lze7fugwkjb4l0z.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.m2qnbngv7nqw58q.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.mgxyu4v4rnxacx3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.oxu7obxtko58lza.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.pao21vjciclsn9.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.pp7sxwycrq56t6d.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.prim4vi45pycpyh.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.rc4r409mk3ix6x3.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.riuxbrjr8w6slfj.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.tisgyhyk77cc8xf.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.u7wldb0nup3wnoc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.v765ocixmr5opd.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.vxdfc09ov4253mw.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.wzkel5nfityymf6.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.x3ijd770tv1lavc.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.xymjhfpo8jushx.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.y78uh0dvhlsyq17.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.y9nw39f0xvtl8od.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.yhgeji7wjy2jc81.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.z146mfyvpq2b532.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.z4ynv0vsdoipg93.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.zrm6ms20h2h9ms.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.zt7q6j0gwsybkek.rcgu.o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df.3lga7t1c4azji8d7.rcgu.o" "-Wl,--as-needed" "-L" "/home/cs/neon/src/neon-main/target/debug/deps" "-L" "/home/cs/neon/src/neon-main/target/debug/build/ring-c0023e928a842a6a/out" "-L" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/cs/neon/src/neon-main/target/debug/deps/libgit_version-331e8f79c2f89707.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpageserver-966c46da3921d0b7.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libclose_fds-2422e895de4cb519.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhumantime_serde-9181afc79eeb8cd4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtenant_size_model-f5843453901d7cc4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcrossbeam_utils-d4cfb526c893d50f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhumantime-16f1a60d25cf563b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpostgres-a2c5823bfbd03fb4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_postgres-85043f8fc121debe.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libphf-cea2561298042ec5.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libphf_shared-296b0ed5bf803ce6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsiphasher-1e8b24c276adef64.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpostgres_types-0e4e7c9f9de710a7.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libetcd_broker-b4647b6756374a11.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libetcd_client-3a7d6d72a991f8ff.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtonic-2d56e089d99b87c6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhyper_timeout-22d97aa8310346f7.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_io_timeout-a309a341065fc886.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libasync_stream-67cc4b827cee1517.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libaxum-58e905cafa074eca.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmatchit-12ba0b727187029d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtower_http-020fc50a46a1cb77.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsync_wrapper-c9530c76962cf320.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libaxum_core-4ca254f859676a03.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmime-e5648ac10b0b6691.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_stream-1ffce3cf31b33e2b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtower-2b5b3a98a402bb83.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtower_layer-4e20b495890d9d6e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libprost-af49844d44a148f0.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpin_project-242d0b6a1f8345a6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librstar-879256f3af7f30dc.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libheapless-31e265fb93a8f5b8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libstable_deref_trait-da79af01e329d2d2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libspin-83cadbf5c68a4fbd.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhash32-a76f8abad063b9ba.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libamplify_num-72576d5d62288ba7.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libwalkdir-c314e26e67b9ed85.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsame_file-ba563d0e418cbdfc.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liburl-94bc8fec903cee77.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libidna-8fa3a92534f0a58a.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libform_urlencoded-edbb2bf54756db67.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libremote_storage-a2bf52e92316f7e4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtoml_edit-5d38fcddda716555.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcombine-6a61493a36c9c36f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librusoto_s3-197ed0a1ae958124.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librusoto_core-1c012caaebaefc12.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libxml-a5244e97fce74be3.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcrc32fast-4974f122c1d65652.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librusoto_signature-1bef50075af218b2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsha2-b661611295bb5762.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmd5-267e1d401438b647.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libopaque_debug-11098af5d3091388.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libblock_buffer-6042c6242f5dba20.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhmac-85d760d6027f0278.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcrypto_mac-349b6a0aad9fb6c1.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libdigest-ecad06db4748a87d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librusoto_credential-b4b5e88bc5399e5f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libshlex-2ba7175e97cc83b8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libzeroize-c55bb2e723565e7a.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures-377980945acab3d4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_executor-7feae2b0af3ef4e0.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libdirs_next-82dfbf68f91fab22.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libdirs_sys_next-ac2fa863a7cef7d6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libchrono-a4ba2a41b1f3dd5e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libiana_time_zone-ec8ba3dd75190b3e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtime-dce2f68eaf58e89f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhyper_tls-43159331aba77170.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_native_tls-4e73a5fe8eeb81c8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnative_tls-2733c556dac573d0.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libopenssl_probe-1cd005c00c8033ff.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libopenssl-2971fb948bf8b21f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libforeign_types-0279dfaa621f1449.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libforeign_types_shared-db8b86cd2cb94f52.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libopenssl_sys-74ded3ea3ebdfc54.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpageserver_api-bd5e84d8121ca93c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpostgres_ffi-fb5db8559d620a1c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcrc32c-f25c49e90f99b373.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmemoffset-321b2681788f54ba.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libutils-75625112a5fd81b1.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtracing_subscriber-5b2e0da97b1a553e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtracing_serde-21bfc9c444acb4b8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnu_ansi_term-97431a1c25e5463c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liboverload-64684a07bb069e2c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsharded_slab-a515ce4a9a8775db.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmatchers-1e86ea5e6d0a4a9d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libregex_automata-c6bf191fa892623a.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libthread_local-b8ae9d7f834a491b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtracing_log-5fc8c256efb26969.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librustls_split-b86200d8336d9bce.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsignal_hook-834b052f6da31e7f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libstrum-bcbe7c4dffb88ba4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librouterify-c05a3270e0fdaf52.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpercent_encoding-3edc9ed19f77d555.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libregex-6c05109145322f84.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libaho_corasick-1317e865a61a56ff.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libregex_syntax-8ae425171753f299.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhyper-d5058cc5c749944c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libwant-56ba44876cab927b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtry_lock-f74fb39df4e543a6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhttparse-ac430afe87ccff06.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libh2-4979bd3b8ff8a7f4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libindexmap-884f65584fce4a71.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhashbrown-705a8fd266828185.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libahash-3a99f5d1db5138af.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_util-67ca6e89c81ce35d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtower_service-6aa2b41fe85ba557.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhttp_body-c3ec4954fc3bfab2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_util-aefbd4a8c14f6d80.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_io-3bef02bd6e7242cf.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libslab-996430e53c31d272.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_channel-364735eed2532d65.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_sink-d144fab9c6feb7ca.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_task-97346f20ec4180d3.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfutures_core-1da5c5d792b7bcf2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhttpdate-38711ad8bb9606ad.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhttp-0222562baadd31db.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libjsonwebtoken-6b9829b991e26d47.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpem-a0b37a0d507030f2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libserde_json-be7d307ffda8ca77.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libryu-351200c3b62ee355.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsimple_asn1-560dd6b41e737236.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtime-88e8a4bb38f5c94f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libitoa-6f8376166b559286.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnum_bigint-70a95e8f52151023.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnum_integer-8eb034bfcab1c781.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnum_traits-55abecd384d68a55.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio_rustls-7aedfafc559720e0.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librustls-4e6a921f4a556e93.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsct-0d9c7fb333d4acf4.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libwebpki-731364c1fbb53bd3.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libring-ea1a639dcfb2891a.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libspin-fbd2cde1d2a40edf.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libuntrusted-2a928f1454b6a3f5.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpq_proto-1e8f9d543f409993.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpostgres_protocol-4b64d58bde966196.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbase64-5c1eff44ad5d0a1f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libstringprep-418051a95b05a6c8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libunicode_normalization-b05dc625d126c697.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtinyvec-5ee116405b53ef12.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtinyvec_macros-dedbcba3207738ff.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libunicode_bidi-639b725b562ff00c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfallible_iterator-34eb33b440dab347.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsha2-a53bcd0005a963a1.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcpufeatures-98f8d4eee2fc2237.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhmac-299cbec7e8610c6b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmd5-41edf12d9139d231.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libdigest-9eacbcc88792ae8e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsubtle-ac936bf3d3b858f6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libblock_buffer-540eba49bb24ba8a.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcrypto_common-01411bf263125f33.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libgeneric_array-6acee32a24e8e630.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtypenum-f23d3f40e98139d3.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbincode-1b440f51beebe88f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtokio-abe8e8fc5a53714e.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsignal_hook_registry-b572b4bd0842c562.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnum_cpus-ff66a18713461252.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsocket2-3bdc8baccd75af1b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmio-9592c835b40e926f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libserde_with-bc12d4fede0698bd.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libconst_format-56e3a56ba0b69906.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtar-987d1190d0a9ee34.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libxattr-2a148ba4f05ffb39.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfiletime-b40bda3f30a31c0d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libitertools-1d1558d194c580de.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libeither-576b7b1795334515.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbytes-0dc6cdf56a560bfd.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmetrics-b11c770f7d1434e8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libprometheus-769c10086069ba2c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libprocfs-06c9e85e62cefefb.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libhex-f8449834956a1b90.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbyteorder-884fbb995f404785.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liblazy_static-6576b7690c4d7d41.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libthiserror-7a1baa7e7d9678cd.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfnv-3682d6178f684f78.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libparking_lot-1e5c577933b9c987.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libparking_lot_core-9f816d6394d04c3b.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libsmallvec-610342211982adeb.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liblock_api-d898f1d8e352c1d8.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libscopeguard-785a7ff67a8fbf97.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtracing-8bc20b6dbce2ccec.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpin_project_lite-8872ded5e5df2958.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtracing_core-f61222777b174938.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libnix-f00533aec0855761.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmemoffset-42302bd3d0db8954.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libpin_utils-6c9c93e138f5d3c2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libfail-95ce00ebe5757531.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liblog-aa84457116f47558.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libserde-7a61093767042c54.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libonce_cell-721e7104da9da139.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librand-2985279cbc72fc67.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librand_chacha-a0f1cef7bdfd156c.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libppv_lite86-7210a45965a2dcbb.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librand_core-473db094bdf027c6.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libgetrandom-963e67fabd1b3913.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libclap-088bd7b3c04bccff.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libatty-21a72f610a4fe4ec.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libstrsim-92814fa05e9fdfeb.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libclap_lex-bcc9b6d39d67dab0.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libos_str_bytes-57998b946b0f917f.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libtermcolor-3d04a58f84b5248d.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbitflags-067fbfe567bc40bf.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libanyhow-986e2181034c0161.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libbacktrace-2def4bdde86bc7bc.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libminiz_oxide-a6597936f865de89.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libadler-1547c9518735e9c9.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libobject-fc18f705f5b8b318.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libmemchr-92f94091d925ff00.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/liblibc-48e940f82dbe58e2.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libaddr2line-309574e91cf38a45.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libgimli-89c568c958f9edee.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/libcfg_if-3f2b6a9cfc3cee15.rlib" "/home/cs/neon/src/neon-main/target/debug/deps/librustc_demangle-59f9ad5762e06fae.rlib" "-Wl,--start-group" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-69edc9ac8de4d39c.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-254ac8a4d96ed89e.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-8bed7ede368468ef.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-9da1150e6aeada6b.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-dec39a40a22b358c.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-7a90882341200e38.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-6a5da46a37549d0a.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-6dc3d1df7e408d5b.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-9d89ad14c568d44a.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-ecbdf47025adae10.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-29db3ffec771ef22.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-8b55ad9e1a2080d1.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-f37a55941b8b3bbd.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-c1d45d3d6971ce0d.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-18ac7cbb154ecd62.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-80c5909c82700e85.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-aa7f747e2f6af7d5.rlib" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-60d544c9f51ce476.rlib" "-Wl,--end-group" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-d1bd89f2a607e488.rlib" "-Wl,-Bdynamic" "-lssl" "-lcrypto" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/cs/.rustup/toolchains/1.62.1-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/cs/neon/src/neon-main/target/debug/deps/pageserver-8508676f9df883df" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs"
  = note: /usr/bin/ld: /home/cs/neon/src/neon-main/target/debug/deps/libutils-75625112a5fd81b1.rlib(utils-75625112a5fd81b1.4tbfmdfzwi0aohoy.rcgu.o): in function `<utils::undroppable::Undroppable as core::ops::drop::Drop>::drop':
          /home/cs/neon/src/neon-main/libs/utils/src/undroppable.rs:31: undefined reference to `
          
                      ERROR: dropping a type that has been marked with the Undroppable type
                      
          '
          collect2: error: ld returned 1 exit status
          
  = help: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
  = note: use the `-l` flag to specify native libraries to link
  = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)


Before spending more time on reverse-mapping linker error to drop-site, I wanted to make sure that we would be ready to take action once we have the drop-site.
So, I converted the linker error to a runtime panic to get a proper stack trace.

Here's how that looks like in the pageserver.log:

$ RUST_BACKTRACE=full ./scripts/pytest -k 'test_pageserver_restart'
thread 'background op worker' panicked at 'dropping a value marked as Undroppable', /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
stack backtrace:
   0: rust_begin_unwind
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:584:5
   1: core::panicking::panic_fmt
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/panicking.rs:142:14
   2: <utils::undroppable::Undroppable as core::ops::drop::Drop>::drop
             at /home/cs/neon/src/neon-main/libs/utils/src/undroppable.rs:17:13
   3: core::ptr::drop_in_place<utils::undroppable::Undroppable>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   4: core::ptr::drop_in_place<pageserver::walredo::PostgresRedoProcess>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   5: core::ptr::drop_in_place<core::option::Option<pageserver::walredo::PostgresRedoProcess>>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   6: core::ptr::drop_in_place<core::cell::UnsafeCell<core::option::Option<pageserver::walredo::PostgresRedoProcess>>>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   7: core::ptr::drop_in_place<std::sync::mutex::Mutex<core::option::Option<pageserver::walredo::PostgresRedoProcess>>>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   8: core::ptr::drop_in_place<pageserver::walredo::PostgresRedoManager>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
   9: core::ptr::drop_in_place<dyn pageserver::walredo::WalRedoManager+core::marker::Sync+core::marker::Send>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
  10: alloc::sync::Arc<T>::drop_slow
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/alloc/src/sync.rs:1106:18
  11: <alloc::sync::Arc<T> as core::ops::drop::Drop>::drop
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/alloc/src/sync.rs:1702:13
  12: core::ptr::drop_in_place<alloc::sync::Arc<dyn pageserver::walredo::WalRedoManager+core::marker::Sync+core::marker::Send>>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
  13: core::ptr::drop_in_place<pageserver::tenant::Tenant>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
  14: alloc::sync::Arc<T>::drop_slow
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/alloc/src/sync.rs:1106:18
  15: <alloc::sync::Arc<T> as core::ops::drop::Drop>::drop
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/alloc/src/sync.rs:1702:13
  16: core::ptr::drop_in_place<alloc::sync::Arc<pageserver::tenant::Tenant>>
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/ptr/mod.rs:486:1
  17: pageserver::tenant_tasks::gc_loop::{{closure}}::{{closure}}
             at /home/cs/neon/src/neon-main/pageserver/src/tenant_tasks.rs:139:9
  18: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/future/mod.rs:91:19
  19: pageserver::tenant_tasks::gc_loop::{{closure}}
             at /home/cs/neon/src/neon-main/pageserver/src/tenant_tasks.rs:140:6
  20: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/future/mod.rs:91:19
  21: <tracing::instrument::Instrumented<T> as core::future::future::Future>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tracing-0.1.37/src/instrument.rs:272:9
  22: pageserver::tenant_tasks::start_background_loops::{{closure}}
             at /home/cs/neon/src/neon-main/pageserver/src/tenant_tasks.rs:39:75
  23: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/future/mod.rs:91:19
  24: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::future::future::Future>::poll
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/panic/unwind_safe.rs:296:9
  25: <futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.24/src/future/future/catch_unwind.rs:36:42
  26: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/panic/unwind_safe.rs:271:9
  27: std::panicking::try::do_call
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:492:40
  28: std::panicking::try
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:456:19
  29: std::panic::catch_unwind
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panic.rs:137:14
  30: <futures_util::future::future::catch_unwind::CatchUnwind<Fut> as core::future::future::Future>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.24/src/future/future/catch_unwind.rs:36:9
  31: <tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:348:35
  32: tokio::task::task_local::LocalKey<T>::scope_inner
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:233:19
  33: <tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:345:13
  34: <tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:348:35
  35: tokio::task::task_local::LocalKey<T>::scope_inner
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:233:19
  36: <tokio::task::task_local::TaskLocalFuture<T,F> as core::future::future::Future>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/task/task_local.rs:345:13
  37: pageserver::task_mgr::task_wrapper::{{closure}}
             at /home/cs/neon/src/neon-main/pageserver/src/task_mgr.rs:308:10
  38: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/future/mod.rs:91:19
  39: tokio::runtime::task::core::CoreStage<T>::poll::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/core.rs:184:17
  40: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/loom/std/unsafe_cell.rs:14:9
  41: tokio::runtime::task::core::CoreStage<T>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/core.rs:174:13
  42: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:480:19
  43: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/panic/unwind_safe.rs:271:9
  44: std::panicking::try::do_call
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:492:40
  45: std::panicking::try
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:456:19
  46: std::panic::catch_unwind
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panic.rs:137:14
  47: tokio::runtime::task::harness::poll_future
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:468:18
  48: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:104:27
  49: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:57:15
  50: tokio::runtime::task::raw::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/raw.rs:194:5
  51: tokio::runtime::task::raw::RawTask::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/raw.rs:134:18
  52: tokio::runtime::task::LocalNotified<S>::run
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/mod.rs:385:9
  53: tokio::runtime::scheduler::multi_thread::worker::Context::run_task::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/scheduler/multi_thread/worker.rs:421:13
  54: tokio::coop::with_budget::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/coop.rs:102:9
  55: std::thread::local::LocalKey<T>::try_with
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/thread/local.rs:445:16
  56: std::thread::local::LocalKey<T>::with
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/thread/local.rs:421:9
  57: tokio::coop::with_budget
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/coop.rs:95:5
  58: tokio::coop::budget
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/coop.rs:72:5
  59: tokio::runtime::scheduler::multi_thread::worker::Context::run_task
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/scheduler/multi_thread/worker.rs:420:9
  60: tokio::runtime::scheduler::multi_thread::worker::Context::run
  61: tokio::runtime::scheduler::multi_thread::worker::run::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/scheduler/multi_thread/worker.rs:372:17
  62: tokio::macros::scoped_tls::ScopedKey<T>::set
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/macros/scoped_tls.rs:61:9
  63: tokio::runtime::scheduler::multi_thread::worker::run
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/scheduler/multi_thread/worker.rs:369:5
  64: tokio::runtime::scheduler::multi_thread::worker::Launch::launch::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/scheduler/multi_thread/worker.rs:348:45
  65: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/blocking/task.rs:42:21
  66: tokio::runtime::task::core::CoreStage<T>::poll::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/core.rs:184:17
  67: tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/loom/std/unsafe_cell.rs:14:9
  68: tokio::runtime::task::core::CoreStage<T>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/core.rs:174:13
  69: tokio::runtime::task::harness::poll_future::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:480:19
  70: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/core/src/panic/unwind_safe.rs:271:9
  71: std::panicking::try::do_call
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:492:40
  72: std::panicking::try
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panicking.rs:456:19
  73: std::panic::catch_unwind
             at /rustc/e092d0b6b43f2de967af0887873151bb1c0b18d3/library/std/src/panic.rs:137:14
  74: tokio::runtime::task::harness::poll_future
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:468:18
  75: tokio::runtime::task::harness::Harness<T,S>::poll_inner
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:104:27
  76: tokio::runtime::task::harness::Harness<T,S>::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/harness.rs:57:15
  77: tokio::runtime::task::raw::RawTask::poll
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/raw.rs:134:18
  78: tokio::runtime::task::UnownedTask<S>::run
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/task/mod.rs:422:9
  79: tokio::runtime::blocking::pool::Task::run
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/blocking/pool.rs:111:9
  80: tokio::runtime::blocking::pool::Inner::run
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/blocking/pool.rs:346:17
  81: tokio::runtime::blocking::pool::Spawner::spawn_thread::{{closure}}
             at /home/cs/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.21.1/src/runtime/blocking/pool.rs:321:13
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

What we see there is that the dropper was the GC thread.
It holds the last ref to the Arc<Tenant> which contains the redo_mgr Arc.
So, when the GC thread drops the tenant, it drops the redo_mgr.

We could now modify the GC thread to do explicit teardown, like so:

Arc::try_unwrap(tenant).and_then(|tenant| tenant.redo_mgr.kill())`.

But I think this breaks encapsulation, because we'd have to do that in every place that might drop a Tenant/Timeline/WalRedoManager.


My take-away from this is that Arc<...<...<TypeWithUndroppableMember>...>...> doesn't go well together, because all the drop sites of the Arc must then know how to destroy the TypeWithUndroppableMember.

So, we shouldn't pursue Approach 3, even if the linker errors were more useful by pointing to the drop site.

@koivunej
Copy link
Contributor

koivunej commented Nov 7, 2022

+1 for managing with a tokio task, I remember starting to look at the differences at the offsite to the current implementation towards a tokio managed process, along the lines of approach 2 but with a tokio task instead of a separate thread. I didn't then or still understand the signal safe fd closing. While adding the handle and a channel will add some memcpy overhead, it will play nicely into making the processes poolable in future.

problame added a commit that referenced this issue Nov 7, 2022
… path

If we're not calling kill() before dropping the PostgresRedoProcess, we
currently leak it.
That's most likely the root cause for #2761.
This patch
1. adds an error log message for that case and
2. adds error handling for all errors on the kill() path.
   If we're a `testing` build, we panic.
   Otherwise, we log an error and leak the process.

The error handling changes (2) are necessary to conclusively state that
the root cause for #2761 is indeed (1). If we didn't have them, the root
cause could be missing error handling instead.

To make the log messages useful, I've added tracing::instrument attributes that
log the tenant_id and PID. That helps mapping back the PID of `defunct`
processes to pageserver log messages. Note that a defunct process's
`/proc/$PID/` directory isn't very useful. We have left little more than
its PID.

Once we have validated the root cause, we'll find a fix, but that's
still an ongoing discussion.

refs #2761
problame added a commit that referenced this issue Nov 8, 2022
… path

If we're not calling kill() before dropping the PostgresRedoProcess, we
currently leak it.
That's most likely the root cause for #2761.
This patch
1. adds an error log message for that case and
2. adds error handling for all errors on the kill() path. If we're a
`testing` build, we panic. Otherwise, we log an error and leak the
process.

The error handling changes (2) are necessary to conclusively state that
the root cause for #2761 is indeed (1). If we didn't have them, the root
cause could be missing error handling instead.

To make the log messages useful, I've added tracing::instrument
attributes that log the tenant_id and PID. That helps mapping back the
PID of `defunct` processes to pageserver log messages. Note that a
defunct process's `/proc/$PID/` directory isn't very useful. We have
left little more than its PID.

Once we have validated the root cause, we'll find a fix, but that's
still an ongoing discussion.

refs #2761
closes #2769
@problame
Copy link
Contributor

problame commented Nov 9, 2022

The change #2769 that adds more logging got deployed.

Analyzing logs on one of the affected pageserver hosts:

admin@zenith-us-stage-ps-4:~$ journalctl --since 08:00 --until 09:00 -u pageserver  --no-pager | grep "dropping PostgresRedoProcess that wasn't killed, likely causing defunct postgres process" | perl -n -e '/pid=(\d+)/ && print $1 . "\n" ' | sort > /tmp/candidates.txt
admin@zenith-us-stage-ps-4:~$ ps -e -o pid,stime,args | grep postgres | grep defunct | grep ' 08:' |awk '{print $1}' | sort > /tmp/defunct.txt
admin@zenith-us-stage-ps-4:~$ diff -u /tmp/defunct.txt /tmp/candidates.txt 
admin@zenith-us-stage-ps-4:~$ echo $?
0
admin@zenith-us-stage-ps-4:~$ wc -l /tmp/defunct.txt 
250 /tmp/defunct.txt

What this means: all of the 250 defunct postgres processes that were started between 08:00 to 09:00 were caused by the problem
outlined above.

I'm optimistic that we have found the root cause.
Moving on to fixing it in #2776 .

problame added a commit that referenced this issue Nov 10, 2022
This change wraps the std::process:Child that we spawn for WAL redo
into a type that ensures that we try to SIGKILL + waitpid() on it.

If there is no explicit call to kill_and_wait(), the Drop implementation
will spawns a task that does it in the BACKGROUND_RUNTIME.
That's an ugly hack but I think it's better than doing kill+wait
synchronously from Drop, since I think the general assumption in the
Rust ecosystem is that Drop doesn't block.
Especially since the drop sites can be _any_ place that drops the last
Arc<PostgresRedoManager>, e.g., compaction or GC.

The benefit of having the new type over just adding a Drop impl to
PostgresRedoProcess is that we can construct it earlier than the full
PostgresRedoProcess in PostgresRedoProcess::launch().
That allows us to correctly kill+wait the child if there is an error in
PostgresRedoProcess::launch() after spawning it.

I also took a stab at a regression test. I manually verified
that it fails before the fix to walredo.rs.

fixes #2761
closes #2776
problame added a commit that referenced this issue Nov 10, 2022
This change wraps the std::process:Child that we spawn for WAL redo
into a type that ensures that we try to SIGKILL + waitpid() on it.

If there is no explicit call to kill_and_wait(), the Drop implementation
will spawns a task that does it in the BACKGROUND_RUNTIME.
That's an ugly hack but I think it's better than doing kill+wait
synchronously from Drop, since I think the general assumption in the
Rust ecosystem is that Drop doesn't block.
Especially since the drop sites can be _any_ place that drops the last
Arc<PostgresRedoManager>, e.g., compaction or GC.

The benefit of having the new type over just adding a Drop impl to
PostgresRedoProcess is that we can construct it earlier than the full
PostgresRedoProcess in PostgresRedoProcess::launch().
That allows us to correctly kill+wait the child if there is an error in
PostgresRedoProcess::launch() after spawning it.

I also took a stab at a regression test. I manually verified
that it fails before the fix to walredo.rs.

fixes #2761
closes #2776
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
t/bug Issue Type: Bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants