Skip to content

TFile issues when coalescing gaps #19245

Description

@jblomer

Check duplicate issues.

  • Checked for duplicates

Description

When deleting several large, consecutive objects (or many small ones), TFile crashes or corrupts the file. The problem seems to be oversized gaps due to coalescing. If the gap becomes larger than 2GB, ROOT crashes. A gap between 1GB and 2GB is successfully created but an attempt to store a small object in this gap corrupts the file.

Reproducer

#include <vector>

class Large {
public:
   std::vector<char> fVec;
};

auto f = TFile::Open("large.root", "RECREATE");
f->SetCompressionSettings(0);

auto obj = new Large();
obj->fVec.resize(1024*1024*1024 - 100, 'x'); // almost 1 GB

f->WriteObject(obj, "obj1");
f->WriteObject(obj, "obj2");

obj->fVec.resize(1024*1024, 'x');
f->WriteObject(obj, "obj3");

f->Write();
f->Close();
delete f;

f = TFile::Open("large.root", "UPDATE");
f->Delete("obj1;*");

// If the next two lines are uncommented, ROOT crashes
//f->Delete("obj2;*");
//f->Delete("obj3;*");

// Creates a combined gap close to 2GB
f->Delete("obj2;*");
f->Write();
f->Close();
delete f;

f = TFile::Open("large.root", "UPDATE");
f->WriteObject(obj, "obj4"); // corrupts the file
f->Write();
f->Close();
delete f;

f = TFile::Open("large.root");
f->Map("extended");

ROOT version

master

Installation method

From source

Operating system

Linux

Additional context

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions