diff options
-rw-r--r-- | .github/workflows/test-cow-fuse.yml | 81 | ||||
-rw-r--r-- | src/fuse/cowfile.c | 5 | ||||
-rw-r--r-- | src/fuse/main.c | 26 | ||||
-rw-r--r-- | src/fuse/main.h | 1 |
4 files changed, 53 insertions, 60 deletions
diff --git a/.github/workflows/test-cow-fuse.yml b/.github/workflows/test-cow-fuse.yml index c0313fb..9b42532 100644 --- a/.github/workflows/test-cow-fuse.yml +++ b/.github/workflows/test-cow-fuse.yml @@ -51,12 +51,13 @@ jobs: - name: Setup cow_merger_service working-directory: ${{ github.workspace }}/../cow_server/ run: | - mkdir /home/runner/work/WorkingDirectory - mkdir /home/runner/work/OriginalImageDirectory - mkdir /home/runner/work/Output - sed -i 's/^ "WorkingDirectory":.*/ "WorkingDirectory": "\/home\/runner\/work\/WorkingDirectory",/g' cow_merger_service/publish/appsettings.json - sed -i 's/^ "OriginalImageDirectory":.*/ "OriginalImageDirectory": "\/home\/runner\/work\/OriginalImageDirectory",/g' cow_merger_service/publish/appsettings.json - sed -i 's/^ "DestinationDirectory":.*/ "DestinationDirectory": "\/home\/runner\/work\/Output",/g' cow_merger_service/publish/appsettings.json + sudo mkdir -m 777 /mnt/work + mkdir /mnt/work/WorkingDirectory + mkdir /mnt/work/OriginalImageDirectory + mkdir /mnt/work/Output + sed -i 's/^ "WorkingDirectory":.*/ "WorkingDirectory": "\/mnt\/work\/WorkingDirectory",/g' cow_merger_service/publish/appsettings.json + sed -i 's/^ "OriginalImageDirectory":.*/ "OriginalImageDirectory": "\/mnt\/work\/OriginalImageDirectory",/g' cow_merger_service/publish/appsettings.json + sed -i 's/^ "DestinationDirectory":.*/ "DestinationDirectory": "\/mnt\/work\/Output",/g' cow_merger_service/publish/appsettings.json while read line; do echo $line; done < cow_merger_service/publish/appsettings.json cd cow_merger_service/publish/ FILENAME=cow_merger_service @@ -65,54 +66,55 @@ jobs: ./cow_merger_service &> log.out & - name: Generate test file working-directory: ${{ github.workspace }}/build/src/cowtest - run: ./dnbd3-fuse-cow-test -c /home/runner/work/OriginalImageDirectory/test.r1 + run: ./dnbd3-fuse-cow-test -c /mnt/work/OriginalImageDirectory/test.r1 - name: Setup dnbd3 server working-directory: ${{ github.workspace }} run: | - mkdir /home/runner/work/dnbd3-server-config/ - cp pkg/config/server.conf /home/runner/work/dnbd3-server-config/ - sed -i "s/^basePath=.*/basePath=\/home\/runner\/work\/OriginalImageDirectory/g" /home/runner/work/dnbd3-server-config/server.conf + mkdir /mnt/work/dnbd3-server-config/ + cp pkg/config/server.conf /mnt/work/dnbd3-server-config/ + sed -i "s/^basePath=.*/basePath=\/mnt\/work\/OriginalImageDirectory/g" /mnt/work/dnbd3-server-config/server.conf cd build/src/server - ./dnbd3-server --config /home/runner/work/dnbd3-server-config/ + ./dnbd3-server --config /mnt/work/dnbd3-server-config/ sleep 5 - name: Run standard test working-directory: ${{ github.workspace }}/build/src run: | - mkdir /home/runner/work/mount - mkdir /home/runner/work/tmp - mkdir /home/runner/work/logs - ./fuse/dnbd3-fuse "/home/runner/work/mount" -f -h localhost -i test -c "/home/runner/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /home/runner/work/logs/standardLog1.out & + mkdir /mnt/work/mount + mkdir /mnt/work/tmp + mkdir /mnt/work/logs + ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -c "/mnt/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/standardLog1.out & PID=$! sleep 5 echo PID: $PID - ./cowtest/dnbd3-fuse-cow-test -t "/home/runner/work/mount/img" + ./cowtest/dnbd3-fuse-cow-test -t "/mnt/work/mount/img" echo unmounting: $PID - sudo umount /home/runner/work/mount + sudo umount /mnt/work/mount wait $PID echo unmounted - ./fuse/dnbd3-fuse "/home/runner/work/mount" -f -h localhost -i test -L "/home/runner/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /home/runner/work/logs/standardLog2.out & + ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -L "/mnt/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/standardLog2.out & PID=$! sleep 5 echo PID: $PID - ./cowtest/dnbd3-fuse-cow-test -v "/home/runner/work/mount/img" + ./cowtest/dnbd3-fuse-cow-test -v "/mnt/work/mount/img" echo unmounting: $PID - sudo umount /home/runner/work/mount + sudo umount /mnt/work/mount wait $PID echo unmounted sleep 30 - echo Output: $(ls /home/runner/work/Output) - ./cowtest/dnbd3-fuse-cow-test -v /home/runner/work/Output/test.r2 + echo Output: $(ls /mnt/work/Output) + ./cowtest/dnbd3-fuse-cow-test -v /mnt/work/Output/test.r2 + rm /mnt/work/Output/test.r2 + rm -rf /mnt/work/tmp - name: Run random test working-directory: ${{ github.workspace }}/build/src run: | - cp /home/runner/work/OriginalImageDirectory/test.r1 /home/runner/work/ - rm -rf /home/runner/work/tmp - mkdir /home/runner/work/tmp - ./fuse/dnbd3-fuse "/home/runner/work/mount" -f -h localhost -i test -c "/home/runner/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /home/runner/work/logs/randomLog1.out & + cp /mnt/work/OriginalImageDirectory/test.r1 /mnt/work/ + mkdir /mnt/work/tmp + ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -c "/mnt/work/tmp" -C localhost:5000 --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/randomLog1.out & PIDFUSE=$! sleep 5 echo PIDFUSE : $PIDFUSE - ./cowtest/dnbd3-fuse-cow-test --randomTest "/home/runner/work/mount/img" "/home/runner/work/test.r1" &> /home/runner/work/logs/randomTestLog1.out & + ./cowtest/dnbd3-fuse-cow-test --randomTest "/mnt/work/mount/img" "/mnt/work/test.r1" &> /mnt/work/logs/randomTestLog1.out & PIDTEST=$! sleep 60 echo "stopping test" @@ -120,31 +122,30 @@ jobs: wait $PIDTEST echo "testStopped" echo unmounting: $PIDFUSE - sudo umount /home/runner/work/mount + sudo umount /mnt/work/mount echo unmounted wait $PIDFUSE - ./fuse/dnbd3-fuse "/home/runner/work/mount" -f -h localhost -i test -L "/home/runner/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /home/runner/work/logs/randomLog2.out & + ./fuse/dnbd3-fuse "/mnt/work/mount" -f -h localhost -i test -L "/mnt/work/tmp" -C localhost:5000 --merge --cow-stats-stdout --cow-stats-file &> /mnt/work/logs/randomLog2.out & PIDFUSE=$! sleep 5 echo PIDFUSE : $PIDFUSE - ./cowtest/dnbd3-fuse-cow-test --compare "/home/runner/work/mount/img" "/home/runner/work/test.r1" &> /home/runner/work/logs/randomTestLog2.out & + ./cowtest/dnbd3-fuse-cow-test --compare "/mnt/work/mount/img" "/mnt/work/test.r1" echo unmounting: $PIDFUSE - sudo umount /home/runner/work/mount + sudo umount /mnt/work/mount echo unmounted wait $PIDFUSE sleep 30 - echo Output: $(ls /home/runner/work/Output) - ./cowtest/dnbd3-fuse-cow-test --compare "/home/runner/work/Output/test.r3" "/home/runner/work/test.r1" + echo Output: $(ls /mnt/work/Output) + ./cowtest/dnbd3-fuse-cow-test --compare "/mnt/work/Output/test.r2" "/mnt/work/test.r1" - name: Print logs if: always() run: | tail -n+0 \ - /home/runner/work/logs/standardLog1.out \ - /home/runner/work/logs/standardLog2.out \ - /home/runner/work/logs/randomLog1.out \ - /home/runner/work/logs/randomTestLog1.out \ - /home/runner/work/logs/randomLog2.out \ - /home/runner/work/logs/randomTestLog2.out \ - /home/runner/work/tmp/status.txt \ + /mnt/work/logs/standardLog1.out \ + /mnt/work/logs/standardLog2.out \ + /mnt/work/logs/randomLog1.out \ + /mnt/work/logs/randomTestLog1.out \ + /mnt/work/logs/randomLog2.out \ + /mnt/work/tmp/status.txt \ ${{ github.workspace }}/build/src/server/dnbd3.log \ ${{ github.workspace }}/../cow_server/cow_merger_service/publish/log.out diff --git a/src/fuse/cowfile.c b/src/fuse/cowfile.c index 82c7af7..ed370c2 100644 --- a/src/fuse/cowfile.c +++ b/src/fuse/cowfile.c @@ -810,7 +810,6 @@ void quitSigHandler( int sig UNUSED ) { uploadCancelled = true; uploadLoop = false; - main_shutdown(); } /** @@ -1023,7 +1022,7 @@ bool cowfile_init( char *path, const char *image_Name, uint16_t imageVersion, } if ( cowUuid != NULL ) { - snprintf( metadata->uuid, UUID_STRLEN, "%s", cowUuid ); + snprintf( metadata->uuid, sizeof(metadata->uuid), "%s", cowUuid ); logadd( LOG_INFO, "Using provided upload session id" ); } else if ( !createSession( image_Name, imageVersion ) ) { return false; @@ -1142,7 +1141,7 @@ bool cowfile_load( char *path, atomic_uint_fast64_t **imageSizePtr, char *server if ( cowUuid != NULL ) { logadd( LOG_INFO, "Overriding stored upload session id with provided one" ); - snprintf( metadata->uuid, UUID_STRLEN, "%s", cowUuid ); + snprintf( metadata->uuid, sizeof(metadata->uuid), "%s", cowUuid ); } *imageSizePtr = &metadata->imageSize; diff --git a/src/fuse/main.c b/src/fuse/main.c index 7be34bd..f76cfb6 100644 --- a/src/fuse/main.c +++ b/src/fuse/main.c @@ -307,8 +307,10 @@ static void image_ll_setattr( fuse_req_t req, fuse_ino_t ino, struct stat *attr, return; } if (to_set & FUSE_SET_ATTR_SIZE) { - cowfile_setSize( req, attr->st_size, ino, fi); + cowfile_setSize( req, attr->st_size, ino, fi); + return; } + fuse_reply_error( req, EACCES ); } /* map the implemented fuse operations */ @@ -402,7 +404,6 @@ int main( int argc, char *argv[] ) char *cow_server_address = NULL; char *image_Name = NULL; char *log_file = NULL; - cow_merge_after_upload = false; uint16_t rid = 0; char **newArgv; int newArgc; @@ -547,13 +548,14 @@ int main( int argc, char *argv[] ) struct sigaction newHandler = { .sa_handler = &noopSigHandler }; sigemptyset( &newHandler.sa_mask ); sigaction( SIGHUP, &newHandler, NULL ); + sigaction( SIGQUIT, &newHandler, NULL ); } while ( 0 ); - if ( useCow ) { - sigset_t sigmask; - sigemptyset( &sigmask ); - sigaddset( &sigmask, SIGQUIT ); // Block here and unblock in cow as abort signal - pthread_sigmask( SIG_BLOCK, &sigmask, NULL ); - } + if ( useCow ) { + sigset_t sigmask; + sigemptyset( &sigmask ); + sigaddset( &sigmask, SIGQUIT ); // Block here and unblock in cow as abort signal + pthread_sigmask( SIG_BLOCK, &sigmask, NULL ); + } if ( !connection_init( server_address, image_Name, rid, learnNewServers ) ) { logadd( LOG_ERROR, "Could not connect to any server. Bye.\n" ); @@ -642,11 +644,3 @@ int main( int argc, char *argv[] ) logadd( LOG_DEBUG1, "Terminating. FUSE REPLIED: %d\n", fuse_err ); return fuse_err; } - -void main_shutdown(void) -{ - fuse_session_exit( _fuseSession ); - // TODO: Figure out why this doesn't wake up the fuse mainloop. - // For now, just send SIGQUIT followed by SIGTERM.... - kill( 0, SIGINT ); -} diff --git a/src/fuse/main.h b/src/fuse/main.h index 53d81e4..bf21805 100644 --- a/src/fuse/main.h +++ b/src/fuse/main.h @@ -8,6 +8,5 @@ extern bool useCow; extern bool cow_merge_after_upload; void image_ll_getattr( fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi ); -void main_shutdown(void); #endif /* main_H_ */ |