Skip to content

Commit 2f7dd69

Browse files
author
Sokolov Yura
committed
remove inplace second pass gc
1 parent c43dbbc commit 2f7dd69

File tree

1 file changed

+8
-45
lines changed
  • src/backend/storage/file

1 file changed

+8
-45
lines changed

src/backend/storage/file/cfs.c

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -768,15 +768,6 @@ typedef enum {
768768
CFS_IMPLICIT
769769
} GC_CALL_KIND;
770770

771-
/* spend 1% for more inplace updates on second pass */
772-
static inline uint32
773-
cfs_room_gc_chunk(uint32 size)
774-
{
775-
if (size < CFS_MIN_COMPRESSED_SIZE(BLCKSZ))
776-
size += size/128;
777-
return size;
778-
}
779-
780771
/*
781772
* Perform garbage collection (if required) on the file
782773
* @param map_path - path to the map file (*.cfm).
@@ -882,8 +873,6 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
882873
uint32 second_pass = 0;
883874
inode_t** inodes = (inode_t**)palloc(RELSEG_SIZE*sizeof(inode_t*));
884875
bool remove_backups = true;
885-
uint32 inplace = 0;
886-
bool prev_seek = false;
887876
int n_pages;
888877
TimestampTz startTime, secondTime, endTime;
889878
long secs, secs2;
@@ -955,10 +944,8 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
955944
cfs_state->gc_stat.processedFiles += 1;
956945
cfs_gc_processed_segments += 1;
957946

958-
newUsed = 0;
959947
for (i = 0; i < n_pages; i++)
960948
{
961-
int room;
962949
size = CFS_INODE_SIZE(*inodes[i]);
963950
if (size != 0)
964951
{
@@ -974,8 +961,7 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
974961
goto Cleanup;
975962
}
976963

977-
room = cfs_room_gc_chunk(size);
978-
if (!cfs_write_file(fd2, block, room))
964+
if (!cfs_write_file(fd2, block, size))
979965
{
980966
elog(WARNING, "CFS failed to write file %s: %m", file_bck_path);
981967
goto Cleanup;
@@ -984,8 +970,7 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
984970
cfs_state->gc_stat.processedPages += 1;
985971

986972
offs = newSize;
987-
newUsed += size;
988-
newSize += room;
973+
newSize += size;
989974
*inodes[i] = CFS_INODE(size, offs);
990975

991976
/* xfs doesn't like if writeback performed closer than 128k to
@@ -1002,6 +987,7 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
1002987
*inodes[i] = CFS_INODE(0, 0);
1003988
}
1004989
}
990+
newUsed = newSize;
1005991

1006992
/* Persist bigger part of copy to not do it under lock */
1007993
/* and persist previous file, cause it will be fsynced in durable rename */
@@ -1041,12 +1027,11 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
10411027
map->inodes[i] &= ~CFS_INODE_CLEAN_FLAG;
10421028
continue;
10431029
}
1044-
second_pass++;
10451030
newUsed -= CFS_INODE_SIZE(nnode);
10461031
newUsed += size;
10471032
if (size != 0)
10481033
{
1049-
int room;
1034+
second_pass++;
10501035
offs = CFS_INODE_OFFS(onode);
10511036

10521037
rc = lseek(fd, offs, SEEK_SET);
@@ -1060,29 +1045,8 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
10601045
}
10611046

10621047
/* copy it without sorting */
1063-
room = cfs_room_gc_chunk(CFS_INODE_SIZE(nnode));
1064-
if (size <= room)
1065-
{
1066-
/* certainly need for uncompressable blocks.
1067-
* could be useful for other too */
1068-
prev_seek = true;
1069-
offs = CFS_INODE_OFFS(nnode);
1070-
rc = lseek(fd2, offs, SEEK_SET);
1071-
Assert(rc == (off_t)offs);
1072-
inplace++;
1073-
}
1074-
else
1075-
{
1076-
if (prev_seek)
1077-
{
1078-
prev_seek = false;
1079-
rc = lseek(fd2, 0, SEEK_END);
1080-
Assert(rc > 0);
1081-
Assert(rc == newSize);
1082-
}
1083-
offs = newSize;
1084-
newSize += size;
1085-
}
1048+
offs = newSize;
1049+
newSize += size;
10861050
if (!cfs_write_file(fd2, block, size))
10871051
{
10881052
elog(WARNING, "CFS failed to write file %s: %m", file_bck_path);
@@ -1092,7 +1056,6 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
10921056
}
10931057
else
10941058
{
1095-
newUsed -= CFS_INODE_SIZE(newMap->inodes[i]);
10961059
newMap->inodes[i] = CFS_INODE(0, 0);
10971060
}
10981061
cfs_state->gc_stat.processedBytes += size;
@@ -1268,10 +1231,10 @@ static bool cfs_gc_file(char* map_path, GC_CALL_KIND background)
12681231

12691232
if (succeed)
12701233
{
1271-
elog(LOG, "CFS GC worker %d: defragment file %s: old size %u, new size %u, logical size %u, used %u, compression ratio %f, time %ld usec; second pass: pages %u, inplace %u, time %ld"
1234+
elog(LOG, "CFS GC worker %d: defragment file %s: old size %u, new size %u, logical size %u, used %u, compression ratio %f, time %ld usec; second pass: pages %u, time %ld"
12721235
,
12731236
MyProcPid, file_path, physSize, newSize, virtSize, usedSize, (double)virtSize/newSize,
1274-
secs*USECS_PER_SEC + usecs, second_pass, inplace,
1237+
secs*USECS_PER_SEC + usecs, second_pass,
12751238
secs2*USECS_PER_SEC + usecs2);
12761239
}
12771240

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy