Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Since I've not gotten any response to the information presented on this page, I'm rewriting it to what I believe Turnin will be. If anyone has issues, let me know.

How to get a turnin enabled repository

First a user will need to visit Apply and create a subversion repository. After the repository has been created, the user can revisit Apply and tie the repository to one or more courses. This will turnin enable the subversion repository and a nightly process will automatically update the repository access_file and turnin folder structure.

Turnin

This page will contain a list of issues/questions that need to be addressed before moving forward with any changes to the Turnin process. I will need the ARC folks to update the information below with information from the Faculty.

Assumptions

Repository Layout

Folder

Use

Managed Permissions

/course/

course specific instructor provided material

Admin=(rw),Instructor=(rw),TA=(rw),Students=(r)

/staff/

Instructor only area

Admin=(rw),Instructor(rw),TA=(rw)

/rice_config/

configuration and permission management

Admin=(rw),Instructor=(rw),TA=(rw)

/turnin/

 

Admin=(rw),Instructor=(rw),TA=(rw),Student=(r)

/turnin/SemesterCode/netId/

for each student's course use

...

Admin=(rw),Instructor=(rw),TA=(rw),netId=(rw)

...

/archive/

...

per semester

Admin=(rw),Instructor=(rw),TA=(rw),netId=(rw)

  • /archive/SemesterCode/netId/

    previous course student area; SemesterCode is F, S, Su plus the last two digits of the year Admin=(rw),Instructor=(rw),TA=(rw),netId=(rw)by default; When initially configuring the repository for turnin the owner can state that they wish for each section to be placed in its own folder. If this flag is set, then the SemesterCode will have a letter appended based on course section. For example COMP221 for Fall 2010 would result in the following semester codes (F10a, F10b) since it has two sections. A course with only one section would still have the section letter appended if the turnin repository is configured to split sections.

Constraints

  • Repositories ARE tied to a full course (eg COMP412). This means ALL sections of a course are included for access to the repository.
  • Repositories ARE NOT tied to specific sections of a course. There will be no support for having two sections of the same course with different turnin repositories.
  • ALL users of a repository will retain access to the repository for up to a minimum of 3 semesters; However, for students, the repository location of their turnin folder will change once the course is over, moving to the archive tree.
  • Except for the Turnin managed access_file block, nothing else in the access_file is changed. The one exception to this, is that new (non-existing) permission blocks will will be added as new students are added to the repository.
  • No data outside of the Turnin managed access_file block is ever deleted automatically. This means that repository data in the archive area will be left untouched once it has been created.
  • No user permission blocks in the access file or repository folders for a user are ever deleted by the automatic processing.
  • Several times a year the automatic process will update the Turnin managed access_file block, removing old groups and adding new ones. The dates that these changes occur need to be specified. Or it needs to be understood that this will happen when the new semester's groups are created.
  • The access file will be much more structured to allow for managed and unmanaged permissions. Breaking the functionality of turnin by corrupting the access file is possible. Fixing broken access files, is best effort or business hours.
  • Wiki Markup
    Each permission block in the access_file must retain the block special tag.  This means that when the turnin process writes out a new permission block *\[/turnin/netid\]* or *\[/archive/XxYY/netid\]* it will tag this block with *## Turnin User: netid ###*, it expects to find this same tag in the access_file the next time it looks.  If it doesn't, it will re-create the permission block.  The contents of the permission block can be managed as the user sees fit.  Only the tag is important to keep the automatic process from re-creating it.
  • Once a permission block has been written to the access_file it will no longer be managed other than to delete the access block after three semesters. This means that you can change the permissions to anything you wish and they will carry forward.
  • These repositories will grow without bound. Due to the copy and delete method used to move student's turnin folders after the current semester, there will be no way to clean up the repository to delete this old data. If it ever comes to the point where we need to clean up a turnin repository, it will require deleting the repository and recreating it, losing all but the last revision of the repository. It may be possible to retain history for the /course/ and /staff/ folders.

Usage

  • Create a repository 'courseXXX'
  • Mark this as a turnin capable repository and assign it to a specific course by subject and course number, eg COMP 412.
  • The automatic turnin process will then use the members of the course as defined in Grouper to do the following:
    • Scan the access file for permission block tags, for any users that should exist in the repository but for which there is no tag
      • Create the user folder /turnin/netid within the repository for current students
      • Create a permissions block in the access file for the user folder
    • On semester changes, all current students with folders in the /turnin/ folder will be moved to the /archive/ folder under a subfolder named FYY, SYY, or SuYY where YY is the last two digits of the year.

Questions

  • How do they expect to handle instances where
    • A course repository was setup for a course and now two instructors are teaching two different sections of the course
  • How much flexibility do they want to make their own changes to the
    repository, the access file and the /turnin/ and /archive/ folders?
    What do they believe they would like to do themselves? Are there use
    cases where they could need to fiddle with the automatic process?
  • When do they want the semester transitions to occur? Should it be
    handled automatically, if so when, or on a random schedule set by each
    professor? If each professor decides when to transition their turnin
    repository to the next semester, how do they envision doing this?
    running a command line tool or visiting a web page, or using direct
    subversion commands?

Examples

Current access_file

Code Block

[/]
evc1 = rw

[/rice_config]
evc1 = rw
* =

[/course]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
@auto.courses.COMP422.Sp10.001.student = r
* = 

[/turnin]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
@auto.courses.COMP422.Sp10.001.student = r
* = 

[/turnin/jmm8]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
jmm8 = rw
* = 

[/turnin/kgs1]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
kgs1 = rw
* = 

[/turnin/xl10]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
xl10 = rw
* = 

[/turnin/cy6]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
cy6 = rw
* = 

[/turnin/chase]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
chase = rw
* = 

[/turnin/smi1]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
smi1 = rw
* = 

[/turnin/yy9]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
yy9 = rw
* = 

[/turnin/dbryant]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
dbryant = rw
* = 

[/turnin/cja3]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
cja3 = rw
* = 

[/turnin/ces2]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
ces2 = rw
* = 

[/turnin/nbh1]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
nbh1 = rw
* = 

[/turnin/xxxtuu1]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
xxxtuu1 = rw
* = 

[/turnin/xxxtgu1]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
xxxtgu1 = rw
* = 

[/turnin/xxxtuu2]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
xxxtuu2 = rw
* = 

[/turnin/xxxtgu2]
@general.IT.ARC.custom.turnin_admin = rw
@auto.courses.COMP422.Sp10.001.instructor = rw
@auto.courses.COMP422.Sp10.001.TA = rw
xxxtgu2 = rw
* = 

...

  • Currently implemented as three active semesters that the course is taught. If the course is only taught in the Fall of each year, then the full repository would be accessible by a user for 3 years. If the course is taught every semester, then the repository would be fully accessible for a year. On the 4th active semester, the oldest semester will be dropped from general access to the repository. This means that students will no longer be able to access any repository folders protected by the student group. However, until the student data is removed or they lose access to their netId, they will retain read/write access to their specific turnin folder.
  • Except for the one small controlled section of the access_file, all other user changes to the access_file should be carried forward.

Data changes controlled by the automatic turnin process

  • Repository data will never be deleted
  • General access to the repository will be controlled by updating the access_file turnin group list. The section of the access_file that is rewritten will be surrounded by comments and user changes are not allowed.
  • As new semesters (and students) are cycled into the turnin group list, the permission blocks for these new semesters and students will be added to the access_file.
  • As new semesters (and students) are cycled into the turnin group list, new repository folders will be added for the semesters and students.

access_file format

Code Block
[groups]

### TURNIN MAINTAINED VALUES: BEGIN ###
### DO NOT CHANGE ANYTHING BETWEEN THESE TAGS ###
turnin_admin =      @general.IT.ARC.custom.turnin_admin
turnin_instructor = @auto.courses.COMP422.Fa10.instructor, \
                    @auto.courses.COMP422.Sp10.instructor, \
                    @auto.courses.COMP422.Fa11.instructor
turnin_ta =         @auto.courses.COMP422.Fa10.TA, \
                    @auto.courses.COMP422.Sp10.TA, \
                    @auto.courses.COMP422.Fa11.TA
turnin_student =    @auto.courses.COMP422.Sp10.student, \
                    @auto.courses.COMP422.Sp10.student, \
                    @auto.courses.COMP422.Sp10.student
turnin_test_student = xxxtuu1,xxxtgu1,xxxtuu2,xxxtgu2
### TURNIN MAINTAINED VALUES: END ###

admin =      @turnin_admin
instructor = @turnin_instructor
ta =         @turnin_ta
student =    <at:var  @turninat:name="turnin_student," />turnin_test_student

[/]
@admin = rw
@instructor = rw
@ta = rw
@student = r

[/rice_config]
@admin = rw
@instructor = rw
@ta = rw
* =

[/coursestaff]
@admin = rw
@instructor = rw
@ta = rw
@student = r
tw
* = 

[/turnincourse]
@admin = rw
@instructor = rw
@ta = rw
@student = r
* = 

## Turnin User: jmm8 ##
[/turnin/jmm8]
@admin = rw
@instructor = rw
@ta = rw
jmm8@student = rwr
* = 

## Turnin User: kgs1 ##
[/turnin/kgs1F10]
@admin = rw
@instructor = rw
@ta = rw
kgs1@student = rwr
* = 

## Turnin User: xl10 ##
[/turnin/F10/xl10netId1]
@admin = rw
@instructor = rw
@ta = rw
xl10netId1 = rwr
* = 

## Turnin User: cy6 ##
[/turnin/F10/cy6netId2]
@admin = rw
@instructor = rw
@ta = rw
cy6netId2 = rwr
* = 

## Turnin User: chase ##
[/turnin/chaseS10]
@admin = rw
@instructor = rw
@ta = rw
chase@student = rwr
* = 

## Turnin User: smi1 ##
[/turnin/S10/smi1netId1]
@admin = rw
@instructor = rw
@ta = rw
smi1netId1 = rwr
* = 

## Turnin User: yy9 ##
[/turnin/S10/yy9netId2]
@admin = rw
@instructor = rw
@ta = rw
yy9netId2 = rwr
* = 

## Turnin User: dbryant ##
[/turnin/dbryantF11]
@admin = rw
@instructor = rw
@ta = rw
dbryant@student = rwr
* = 

## Turnin User: cja3 ##
[/turnin/F11/cja3netId1]
@admin = rw
@instructor = rw
@ta = rw
cja3netId1 = rwr
* = 

## Turnin User: ces2 ##
[/turnin/F11/ces2netId2]
@admin = rw
@instructor = rw
@ta = rw
ces2netId2 = rwr
* = 

## Turnin User: nbh1 ##
[/turnin/nbh1test]
@admin = rw
@instructor = rw
@ta = rw
nbh1@student = rwr
* = 

## Turnin User: xxtuu1 ##
[/turnin/test/xxxtuu1]
@admin = rw
@instructor = rw
@ta = rw
xxxtuu1 = rw
* = 

## Turnin User: xxxtgu1 ##
[/turnin/test/xxxtgu1]
@admin = rw
@instructor = rw
@ta = rw
xxxtgu1 = rw
* = 

## Turnin User: xxxtuu2 ##
[/turnin/test/xxxtuu2]
@admin = rw
@instructor = rw
@ta = rw
xxxtuu2 = rw
* = 

## Turnin User: xxxtgu2 ##
[/turnin/test/xxxtgu2]
@admin = rw
@instructor = rw
@ta = rw
xxxtgu2 = rw
* =