Add trace file path

This commit is contained in:
Bojan Serafimov
2022-09-12 13:38:55 -04:00
parent 1209572cec
commit 0bfc422eb3
3 changed files with 37 additions and 16 deletions

View File

@@ -354,6 +354,22 @@ impl PageServerConf {
self.timelines_path(tenantid).join(timelineid.to_string())
}
pub fn traces_path(&self) -> PathBuf {
self.workdir.join("traces")
}
pub fn trace_path(
&self,
tenant_id: &ZTenantId,
timeline_id: &ZTimelineId,
connection_id: &ZTimelineId, // TODO make a new type
) -> PathBuf {
self.traces_path()
.join(tenant_id.to_string())
.join(timeline_id.to_string())
.join(connection_id.to_string())
}
//
// Postgres distribution paths
//

View File

@@ -64,21 +64,21 @@ pub enum PagestreamBeMessage {
}
#[derive(Debug)]
struct PagestreamExistsRequest {
pub struct PagestreamExistsRequest {
latest: bool,
lsn: Lsn,
rel: RelTag,
}
#[derive(Debug)]
struct PagestreamNblocksRequest {
pub struct PagestreamNblocksRequest {
latest: bool,
lsn: Lsn,
rel: RelTag,
}
#[derive(Debug)]
struct PagestreamGetPageRequest {
pub struct PagestreamGetPageRequest {
latest: bool,
lsn: Lsn,
rel: RelTag,
@@ -86,34 +86,34 @@ struct PagestreamGetPageRequest {
}
#[derive(Debug)]
struct PagestreamDbSizeRequest {
pub struct PagestreamDbSizeRequest {
latest: bool,
lsn: Lsn,
dbnode: u32,
}
#[derive(Debug)]
struct PagestreamExistsResponse {
pub struct PagestreamExistsResponse {
exists: bool,
}
#[derive(Debug)]
struct PagestreamNblocksResponse {
pub struct PagestreamNblocksResponse {
n_blocks: u32,
}
#[derive(Debug)]
struct PagestreamGetPageResponse {
pub struct PagestreamGetPageResponse {
page: Bytes,
}
#[derive(Debug)]
struct PagestreamErrorResponse {
pub struct PagestreamErrorResponse {
message: String,
}
#[derive(Debug)]
struct PagestreamDbSizeResponse {
pub struct PagestreamDbSizeResponse {
db_size: i64,
}
@@ -452,9 +452,9 @@ impl PageServerHandler {
// Make request tracer if needed
let repo = tenant_mgr::get_repository_for_tenant(tenant_id)?;
let trace_read_requests = repo.get_trace_read_requests();
let mut tracer = if trace_read_requests {
Some(Tracer::new())
let mut tracer = if repo.get_trace_read_requests() {
let path = repo.conf.trace_path(&tenant_id, &timeline_id, &timeline_id);
Some(Tracer::new(path))
} else {
None
};

View File

@@ -1,6 +1,9 @@
use crate::page_service::PagestreamFeMessage;
use std::{fs::File, io::Write, path::PathBuf};
pub struct Tracer {}
pub struct Tracer {
output: File,
}
impl Drop for Tracer {
fn drop(&mut self) {
@@ -9,8 +12,10 @@ impl Drop for Tracer {
}
impl Tracer {
pub fn new() -> Self {
Tracer {}
pub fn new(path: PathBuf) -> Self {
Tracer {
output: File::create(path).expect("failed to create trace file"),
}
}
pub fn trace(&mut self, _msg: &PagestreamFeMessage) {
@@ -18,6 +23,6 @@ impl Tracer {
}
pub fn flush(&mut self) {
// TODO(now) implement
self.output.flush().expect("failed to flush trace file");
}
}